我目前面临 selenium 在 javascript 按钮上获取确切 xpath 的问题,如果有人能启发我或指导我,我将不胜感激。
从图中可以看出,突出显示的是 javascript 按钮。我打算做的是使用 selenium 找到显示“账单”的按钮,然后单击它以清除状态。
我目前的代码是
while True:
try:
driver.find_element_by_xpath("//*[@id='main']/div/div/div[2]/div/div[2]/table/tbody/tr[1]/td[12]/a[1]")
except NoSuchElementException:
driver.refresh()
time.sleep(5)
else:
time.sleep(3)
driver.find_element_by_xpath("//*[@id='main']/div/div/div[2]/div/div[2]/table/tbody/tr[1]/td[12]/a[1]").click()
我想要它做的是搜索“bill”按钮,如果没有找到,请不断刷新页面直到出现“bill”按钮,然后单击它会将其带到另一个页面。请注意,它可能会出现超过 1 个“账单”按钮(仍然没有弄清楚如何为该部分编码,但我希望它点击出现时间较早的“账单”按钮的行首先将转到另一个页面,然后在该页面上清除后将转发回此页面并继续使用第二个“账单”按钮等)
我的代码现在发生的情况是,xpath 元素仅位于“bill”按钮的第一行,它也可以是位于第一行同一位置的“check”按钮。就像我之前提到的那样,可能会出现多个“账单”按钮,所以我不确定如何解决这个问题。
这是我从 chrome 浏览器检查“账单”按钮时得到的 html。
<a href="javascript:;" onclick="showContent('billing','/info/bill/12');" class="btn btn-danger btn-sm">
<span class="glyphicon glyphicon-card">
</span>
bill
</a>
如果有人能帮我解决这个问题,我真的很感激。谢谢
最佳答案
看起来您的 XPATH 已被复制粘贴。这应该行得通,因为每个 XPATH 都是唯一的,但让我展示另一种声明 XPATH 的方法。
尝试以这种格式声明 XPATH//tag_name[@attr1="value1"and @attr2="value2"and...and @attrn="valuen"]。在你的例子中:
while True:
try:
driver.find_element_by_xpath("//a[@class='btn btn-danger btn-sm' and @href='javascript;']")
except NoSuchElementException:
driver.refresh()
time.sleep(5)
else:
time.sleep(3)
driver.find_element_by_xpath("//a[@class='btn btn-danger btn-sm' and @href='javascript;']").click()
您还可以通过在控制台中搜索 XPATH 来验证您的 XPATH 是否唯一。在控制台中单击 Ctrl+F 并复制粘贴您的 XPATH。如果结果数为 1,则可以。否则,请尝试向您的 XPATH 添加更多属性。
还要在控制台中检查按钮的控件是保留在 a 中还是包裹在另一个标签中。如果它包含在另一个标记中,那么您可能必须更改 XPATH。
关于javascript - python selenium xpath 多个按钮使用 javascript 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62187408/