通过XPath点击按钮

2 投票
3 回答
9927 浏览
提问于 2025-05-10 15:42

我想点击这个按钮:

        <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 个回答

1

尝试

点击 关闭 按钮-

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()
2

这个问题可能有很多原因。没有完整的页面源代码,很难判断到底是什么导致的。以下是几个例子:

  • 按钮是动态加载的吗?如果是这样,可能在Selenium尝试访问这个按钮时,它还没有出现在页面上。你可能需要等到这个元素加载完成。

  • 按钮是在一个iframe里面吗?如果是这样,你需要使用driver.switch_to_frame()切换到正确的框架。想了解如何切换框架,可以查看这个页面

  • 你是否在动态加载其他元素?因为按钮似乎在div 22里面,这种情况是有可能的。当这些元素加载时,按钮的XPath可能会改变。

总之,如果XPath是正确的,元素已经加载,并且你在查看正确的框架,应该就能找到这个元素。如果你能编辑页面源代码,一个解决方案是给你想点击的按钮添加一个id属性。这样就可以通过ID轻松找到这个元素。你可以在这里找到相关文档。请注意,ID必须是唯一的,以确保你找到的是正确的按钮。这也能解决其他元素动态加载的问题。

3

因为这些按钮的CSS样式是一样的,你可以获取所有的按钮,看看它们的文字内容是否是你想要的,然后点击那个按钮。我不太懂python,所以请原谅我可能的语法错误。

buttons = driver.find_elements_by_css_selector("button")

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

撰写回答