【问题标题】:How do I make Selenium Python click on a button element?如何让 Selenium Python 单击按钮元素?
【发布时间】:2019-12-27 18:47:58
【问题描述】:

所以我刚开始使用 Selenium for Python,我试图点击一个隐藏在几个 div 元素中的按钮元素;我已经尝试了很多东西,但没有任何效果。除了等待按钮可单击然后单击它的最后一部分之外,代码中的所有内容都有效。我将非常感谢这里的一些帮助,谢谢。 :)

HTML:

代码试验:

错误堆栈跟踪:

【问题讨论】:

  • 请考虑将您的代码插入文本而不是图片,以便任何人都可以复制尝试。
  • 没关系,我现在看到它不是您的 html,因此您无法添加名称或 id
  • 但是 find_element_by_XPath 可能仍然可行(之前评论中的链接)

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

点击**Maybe Later**按钮。 引入 WebDriverWait() 和 element_to_be_clickable() 并遵循 XPATH 或 CSS 选择器。

XPATH

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//div[@class='modal-footer']//button[@Class='btn btn-danger x' and text()='Maybe Later']"))).click()

CSS 选择器:

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.modal-footer button.btn.btn-danger.x[style='danger']"))).click()

您需要导入以下库。

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

【讨论】:

    【解决方案2】:

    css 选择器将成为你最好的朋友,

    您应该始终考虑添加尽可能多的属性

    maybe_later_css = 'button[class="btn btn-danger"]'
    # type str, '<tag-name>[<attribute-name> = <attribute-value>]'
    
    driver.find_element_by_css_selector(maybe_later_css).click()
    

    所有元素都遵循这种格式,它的优越性和每次都按预期工作

    唯一的麻烦是当存在多个按钮的类名相同时,在这种情况下,您应该找到不同的属性来填充 [] 括号

    【讨论】:

      【解决方案3】:

      文本为 Maybe Later 的元素位于 Modal Dialog Box 内,因此要在元素上定位和 click(),您必须为 element_to_be_clickable() 诱导 WebDriverWait您可以使用以下任一Locator Strategies

      • 使用CSS_SELECTOR

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.modal-footer#eFooter button.btn.btn-danger.x[style='danger']"))).click()
        
      • 使用XPATH

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='modal-footer' and @id='eFooter']//button[@class='btn btn-danger x' and @style='danger']"))).click()
        
      • 注意:您必须添加以下导入:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-26
        • 2011-02-18
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        • 2017-03-25
        • 2022-08-11
        • 1970-01-01
        相关资源
        最近更新 更多