[英]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.