繁体   English   中英

Selenium,如何定位并单击特定按钮

[英]Selenium, how to locate and click a particular button

我正在使用 selenium 尝试抓取此网站中的产品列表: https ://www.zonacriativa.com.br/harry-potter

但是,我无法获得完整的产品列表。 该页面列出了 116 个产品,但一次只显示了几个。 如果我想查看其他产品,我需要多次点击底部的“Carregar mais Produtos”(加载更多产品)按钮以获取完整列表。

我找不到这个按钮,因为它没有 id 并且它的类是一个巨大的字符串。 我已经尝试了几种方法,例如下面的示例,但它们似乎不起作用。 有什么建议么?

driver.find_element("xpath", "//button[text()='Carregar mais Produtos']").click()
driver.find_element("css selector", ".vtex-button__label.flex.items-center.justify-center.h-100.ph5").click()
driver.find_element(By.CLASS_NAME, "vtex-button.bw1.ba.fw5.v-mid.relative.pa0.lh-solid.br2.min-h-small.t-action--small.bg-action-primary.b--action-primary.c-on-action-primary.hover-bg-action-primary.hover-b--action-primary.hover-c-on-action-primary.pointer").click()

您尝试单击的元素最初位于可见屏幕之外,因此您无法单击它。 另外这个 XPath 至少对我来说没有找到那个元素。
您需要做的是向下滚动页面,直到该按钮变得可见且可点击,然后点击它。
以下代码单击该按钮 1 次:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.add_argument("start-maximized")

webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(options=options, service=webdriver_service)
wait = WebDriverWait(driver, 5)

url = "https://www.zonacriativa.com.br/harry-potter"
driver.get(url)
while True:
    try:
        wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class,'buttonShowMore')]//button"))).click()
        break
    except:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

上面的代码可以简单地修改为滚动并单击该按钮,直到我们到达没有显示该按钮的最新页面:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.add_argument("start-maximized")

webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(options=options, service=webdriver_service)
wait = WebDriverWait(driver, 5)

url = "https://www.zonacriativa.com.br/harry-potter"
driver.get(url)
while driver.find_elements(By.XPATH, "//div[contains(@class,'buttonShowMore')]//button"):
    try:
        wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class,'buttonShowMore')]//button"))).click()
    except:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM