Mengikis web: Atribut href hilang - Perlu mensimulasikan klik tetikus untuk mengikis web?
P粉550823577
P粉550823577 2024-04-04 10:32:06
0
1
3668

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粉550823577
P粉550823577

membalas semua(1)
P粉807471604

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()
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan