簡體   English   中英

無法單擊帶有 selenium 的按鈕

[英]Cant click button with selenium

我正在用 selenium 和 bs4 制作一個網絡爬蟲,以保持一些購物項目的庫存正常,我想點擊一個加載更多按鈕,看起來像這個按鈕,這里是 HTML 代碼,網站是Z5E056C500A1C4BADE7 www.nvidia.com/en-us/shop/geforce/?page=1&limit=9&locale=en-us

HTML 按鍵代碼

按鈕的 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.

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