[英]Cant click button with selenium
我正在用 selenium 和 bs4 制作一個網絡爬蟲,以保持一些購物項目的庫存正常,我想點擊一個加載更多按鈕,看起來像這個按鈕,這里是 HTML 代碼,網站是Z5E056C500A1C4BADE7 www.nvidia.com/en-us/shop/geforce/?page=1&limit=9&locale=en-us
HTML 按鍵代碼
每當我嘗試使用 bs4 查找元素時,它都可以使用,但它從不使用
driver.find_element_by_class_name("buy-link load-more-btn")
我需要它來單擊按鈕,有人可以幫我嗎
我是否一次通過了太多課程?
find_element_by_class_name
只接受一個 class。 您正在其中傳遞多個類。
嘗試僅使用一個 class 來實現它
driver.find_element_by_class_name("load-more-btn").click()
其他兩個建議的組合。 如果我正確理解 Selenium ,它基本上會將任何 find_element_* 轉換為 css 選擇器,所以如果你把兩者都放在 class 名稱中,那么在 class 名稱中會有一個空格。 這對我有用。
# Removes the Accept Cookies Banner
driver.find_element_by_css_selector("div.green-box-btn").click()
# Performs the click you want
driver.find_element_by_css_selector("input.buy-link").click()
driver.find_element_by_class_name("buy-link load-more-btn").click()
請將 click() 添加到末尾。
LOAD MORE元素位於DOM 樹的底部,因此要單擊它,您需要為element_to_be_clickable()
誘導WebDriverWait ,該元素將自動在視口中滾動元素並調用click()
,您可以使用以下任一種定位器策略:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.buy-link.load-more-btn[value='LOAD MORE']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='buy-link load-more-btn' and @value='LOAD MORE']"))).click()
注意:您必須添加以下導入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.