簡體   English   中英

在 Python 中使用 Selenium webdriver 勾選復選框

[英]Tick a checkbox using Selenium webdriver in Python

同學們,

我正在做一些網頁抓取,需要從 www1.hkexnews.hk 網站下載多個 PDF。

但是,我在嘗試使我的 Selenium chromedriver勾選每次想要在上述網站上下載 PDF 時出現的框時遇到問題。 代碼執行,但該框仍然未單擊。

請參考我下面的源代碼 - 將不勝感激任何建議!

driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/chromedriver',options=chrome_options)
driver.implicitly_wait(10)
driver.maximize_window()

start_address = "https://www1.hkexnews.hk/app/appyearlyindex.html?lang=en&board=mainBoard&year=2021"

driver.get(start_address)
PDF_link = driver.find_element_by_xpath("//a[contains(text(),'Full Version')]")
print("Now clicking...'", PDF_link.text,"'")
PDF_link.click()

checkbox = driver.find_element_by_id('warning-statement-accept')
print("Now clicking...", checkbox.text)
checkbox.click

這應該這樣做:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = "https://www1.hkexnews.hk/app/appyearlyindex.html?lang=en&board=mainBoard&year=2021"

driver = webdriver.Chrome()
wait = WebDriverWait(driver,10)

driver.get(link)
elem = wait.until(EC.presence_of_element_located((By.XPATH,"//tr[@class='record-ap-phip']//a[contains(.,'Full Version')]")))
elem.click()
wait.until(EC.presence_of_element_located((By.XPATH,"//*[@id='warning-statement-dialog']//label[@for='warning-statement-accept']"))).click()
wait.until(EC.presence_of_element_located((By.XPATH,"//*[@id='warning-statement-dialog']//a[contains(@class,'btn-ok')]"))).click()

這里有幾個問題:

  1. “復選框”定位器錯誤。
  2. 您當前的代碼將僅下載第一個 PDF 文件。
    最好使用預期條件顯式等待而不是隱式等待。
    這應該會更好:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/chromedriver',options=chrome_options)
wait = WebDriverWait(driver, 20)

driver.maximize_window()

start_address = "https://www1.hkexnews.hk/app/appyearlyindex.html?lang=en&board=mainBoard&year=2021"

driver.get(start_address)
PDF_link = wait.until(EC.visibility_of_element_located((By.XPATH, "//a[contains(text(),'Full Version')]")))

print("Now clicking...'", PDF_link.text,"'")
PDF_link.click()

checkbox = wait.until(EC.visibility_of_element_located((By.XPATH, "//label[@for='warning-statement-accept']")))
print("Now clicking...", checkbox.text)
checkbox.click

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM