使用xpath单击按钮

时间:2015-11-19 15:37:05

标签: python html selenium xpath

我想点击此按钮:

        <div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix">
            <div class="ui-dialog-buttonset">
                <button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" type="button" role="button" aria-disabled="false">
                    <span class="ui-button-text">Create</span>
                </button>
               <button aria-disabled="false" role="button" class="ui-button ui-widget    ui-state-default ui-corner-all ui-button-text-only" type="button">

               <span class="ui-button-text">Close</span>
               </button>
               </div>

我想使用xpath这样做。这是我的代码:

driver.find_element_by_xpath("/html/body/div[22]/div[3]/div/button[1]")

我也尝试过:

driver.find_element_by_xpath(".//div[22]/div[3]/div/button[1]")

我不断收到错误无法找到元素。我应该尝试不同的定位器

3 个答案:

答案 0 :(得分:3)

由于CSS是相同的,您可以获取所有按钮,获取文本并查看它是否是您想要的并单击它。我不知道python所以请原谅我的语法错误。

buttons = driver.find_elements_by_css_selector("button")

for button in buttons:
  if button.text.strip() == "Create":
    button.click()

答案 1 :(得分:1)

有多个问题可能导致该问题。如果没有该页面的完整来源,则无法确定导致该页面的原因。几个例子:

  • 按钮是否动态加载?如果是这样,也许Selenium试图在它真正在页面上之前访问它。您可能需要等到元素加载完毕。

  • iframe中的按钮是?在这种情况下,您需要使用driver.switch_to_frame()切换到正确的名称。有关如何切换帧的详细信息,请参阅this page

  • 您是否动态加载其他元素?由于按钮似乎在div 22中,这似乎是可能的。这可能会在加载这些元素时更改按钮的XPath。

最后,如果XPath正确,则加载元素,并且您正在查看右侧框架,它应该能够找到该元素。如果您有能力编辑页面源,一种解决方案是向您尝试单击的按钮添加id属性。然后通过其ID来定位元素将是微不足道的。您可以找到here的文档。请注意,ID必须是唯一的,以确保您找到正确的按钮。这也可以解决动态加载其他元素的问题。

答案 2 :(得分:0)

尝试

点击Close按钮 -

driver.find_element_by_xpath("//button[@class='ui-button ui-widget    ui-state-default ui-corner-all ui-button-text-only']/following-sibling::span[@class='ui-button-text' and contains(text(),'Close')]").click()