繁体   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