Rumah  >  Soal Jawab  >  teks badan

Mengikis web: Atribut href hilang - Perlu mensimulasikan klik tetikus untuk mengikis web?

Untuk projek mengikis web yang menyeronokkan, saya ingin mengumpul data NHL daripada ttps://www.nhl.com/stats/teams.

Terdapat tab eksport Excel boleh klik yang boleh saya temui menggunakan seleniumbs4.

Malangnya, di situlah ia berakhir: Oleh kerana tiada atribut href, saya nampaknya tidak dapat mengakses data.

Saya mendapat apa yang saya mahu dengan mensimulasikan klik tetikus menggunakan pynput tetapi saya ingin tahu:

Apakah yang boleh saya lakukan secara berbeza? Kalau rasa janggal.

-> Label dengan ikon eksport boleh didapati di sini:

a class="styles__ExportIcon-sc-16o6kz0-0 dIDMgQ"

-> Ini kod saya

`import pynput
from pynput.mouse import Button, Controller
import time

from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome(executable_path = 'somepath\chromedriver.exe')

URL = 'https://www.nhl.com/stats/teams'

driver.get(URL)
html = driver.page_source  # DOM with JavaScript execution complete
soup = BeautifulSoup(html)
body = soup.find('body')
print(body.prettify())


mouse = Controller()

time.sleep(5) # Sleep for 5 seconds until page is loaded
mouse.position = (1204, 669) # thats where the icon is on my screen
mouse.click(Button.left, 1) # executes download`

P粉550823577P粉550823577179 hari yang lalu3482

membalas semua(1)saya akan balas

  • P粉807471604

    P粉8074716042024-04-05 00:51:05

    Tidak href属性,通过JS触发下载。使用 selenium 时找到您的元素并使用 .click() Muat turun fail:

    driver.find_element(By.CSS_SELECTOR,'h2>a').click()

    Gunakan kelas bermula dengan css 选择器 来获取直接子级 的<a>

    或者通过以styles__E​​xportIcon di sini untuk memilihnya terus:

    driver.find_element(By.CSS_SELECTOR,'a[class^="styles__ExportIcon"]').click()

    Contoh

    Anda mungkin perlu berurusan dengan sepanduk onetrust, jadi klik padanya dahulu dan kemudian muat turun borang.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
    
    url = 'https://www.nhl.com/stats/teams'
    driver.get(url)
    driver.find_element(By.CSS_SELECTOR,'#onetrust-reject-all-handler').click()
    driver.find_element(By.CSS_SELECTOR,'h2>a').click()

    balas
    0
  • Batalbalas