python - 构建 XPATH 表达式以获取并单击按钮元素

标签 python selenium selenium-webdriver xpath webdriverwait

我正在用 Selenium 构建一个刮刀,除了缺少一个数据字段之外,我已经启动并运行了它。我需要先按下按钮,然后获取值。但我无法按下按钮,因为我似乎无法构建正确的 xpath 表达式来使用 selenium 获取它,

网址是这个:https://www.ikea.com/mx/es/p/kallax-estante-blanco-80275887/

我需要单击“Medidas”按钮(在页面中间滚动,位于“Detalles del Producto”和“Productosimites”之间)以打开侧面板并获取我需要的信息。 但到目前为止,我还无法为按钮设置正确的 XPATH 表达式。

我尝试过

driver.find_element_by_xpath(
     "//button[@class='range-revamp-chunky-header']"
 ).click()

但是这样它点击了第一个按钮(“Detalles del Producto”)

还尝试过类似的东西

driver.find_element_by_xpath(
     "//button[@class='range-revamp-chunky-header' AND @text='Medidas']"
 ).click()

但我无法使其工作,我刚刚收到此错误:

Message: no such element: Unable to locate element: {"method":"xpath","selector":"//button[@class='range-revamp-chunky-header' and @text='Medidas']"}

顺便说一下,按钮列表是动态的...有时,可以有 1、2、3 或 4 个具有相同类的按钮,我能看到的唯一区别是按钮的文本,所以总是具有该类的第二个按钮(如提供的 URL 中所示)并不总是有效。

最佳答案

要单击文本为 Medidas 的元素,您可以使用以下 Locator Strategy :

  • 使用xpath:

    driver.find_element(By.XPATH, "//span[text()='Medidas']").click()
    

理想情况下,您需要诱导 WebDriverWait对于 element_to_be_clickable()您可以使用以下任一 Locator Strategy :

  • 使用XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[contains(., 'login or register')]"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

关于python - 构建 XPATH 表达式以获取并单击按钮元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70206988/

相关文章:

java - Java 中是否有等效的 Python 异常?

python - Pandas 数据框到列表字典

python - 使用 selenium 抓取页面链接总是返回有限数量的链接

css - 如何使用 Selenium 验证 css 类中的文本?

python - 类对象上的赋值和深层复制之间的区别

python - 在 Django 的 TEMPLATE_DIRS 中使用外部 URL

Selenium 框架和 json 中的测试数据

java - 使用 Cucumber DataTable 更新表单

java - 带有 Selenium 和 Java 关键字的机器人框架

Python Selenium 屏幕抓取