【问题标题】:Python - clicking on button with SeleniumPython - 单击带有 Selenium 的按钮
【发布时间】:2019-02-27 11:39:18
【问题描述】:

这是我要点击的按钮:

<button class="stkv-c-button stkv-us-button-color--background 
    stkv-u-background-color-transition-150 
    stkv-us-button-color--border stkv-us-button-color 
    stkv-us-button-color--fill stkv-c-button 
    stkv-c-button--raised stkv-c-button--big">

    <span class="stkv-c-button__label stkv-c-button__label--big">Vote Now</span>
</button>

这是 xpath(从 Firefox 中提取):

[@id='root']/html/body/div/div/div[3]/div/div/footer/div/button"

我尝试了多种点击按钮的方法,均无济于事。

self.driver.find_element_by_xpath("//*[@id='root']/html/body/div/div/div[3]/div/div/footer/div/button").click()
self.driver.findElement(By.id("Vote Now")).click()
self.driver.find_element_by_name("Vote").send_keys(Keys.ENTER)
self.driver.find_element_by_id('stkv-c-button stkv-us-button-color--background stkv-u-background-color-transition-150 stkv-us-button-color--border stkv-us-button-color stkv-us-button-color--fill stkv-c-button stkv-c-button--raised stkv-c-button--big').click()

任何建议将不胜感激!

我运气不好。

【问题讨论】:

  • 当您尝试使用该代码时会发生什么?它会抛出 ElementNotFound 异常吗?

标签: python selenium xpath css-selectors webdriver


【解决方案1】:

您可以通过显示文本找到按钮。

locator = "//button[span[text()='Vote Now']]"
self.driver.find_element_by_xpath(locator).click()

【讨论】:

    【解决方案2】:

    您的按钮没有 id 或名称,因此 find_element_by_namefind_element_by_id 方法将不起作用。 find_element_by_class_name 似乎是合乎逻辑的选择,但不幸的是它只需要 1 个类,并且由于您的按钮有多个类,它也不起作用。我会尝试使用其 CSS 选择器找到按钮:

    self.driver.find_element_by_css_selector('button.stkv-c-button.stkv-us-button-color--background.stkv-u-background-color-transition-150.stkv-us-button-color--border.stkv-us-button-color.stkv-us-button-color--fill.stkv-c-button.stkv-c-button--raised.stkv-c-button--big').click()
    

    只要页面上没有其他按钮具有完全相同的 CSS 选择器,这应该会为您提供正确的按钮。一般来说,如果你想找到一个有多个类的元素,例如&lt;button class="A B C"&gt;MyButton&lt;/button&gt;,那么你可以这样做:

    self.driver.find_element_by_css_selector('button.A.B.C')
    

    【讨论】:

      【解决方案3】:

      使用这个 XPath: //button[normalize-space()='Vote Now']

      【讨论】:

        【解决方案4】:

        根据您在按钮上共享给click() 的 HTML,文本为 Vote Now,您可以使用以下任一解决方案:

        • CSS_SELECTOR:

          driver.find_element_by_xpath("span.stkv-c-button__label.stkv-c-button__label--big").click()
          
        • XPATH:

          driver.find_element_by_css_selector("//span[@class='stkv-c-button__label stkv-c-button__label--big' and contains(.,'Vote Now')]").click()
          

        【讨论】:

          猜你喜欢
          • 2020-04-14
          • 2022-01-19
          • 1970-01-01
          • 2015-10-18
          • 2019-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-27
          相关资源
          最近更新 更多