【问题标题】:python selenium xpath multiple button using javascript issuespython selenium xpath 多个按钮使用javascript问题
【发布时间】:2020-09-23 00:16:29
【问题描述】:

我目前正面临 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()

我想要它做的是搜索“账单”按钮,如果没有找到,请继续刷新页面直到出现“账单”按钮,然后单击它会将其带到另一个页面。请注意,它可能会出现超过 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>
                                    &nbsp;bill
                                </a>

如果有人能帮助我解决这个问题,我真的很感激。谢谢

【问题讨论】:

    标签: javascript python selenium


    【解决方案1】:

    看起来您的 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。

    【讨论】:

    • 嗨,Sarath,感谢您对我的问题的帮助!但是我的“备注”、“检查”等按钮都具有相同的类。所以如果我使用你的xpath的方法,它不会捕获所有按钮吗?无论如何只捕获“账单”按钮吗?可以使用您提到的那些属性制作 xpath 并添加另一个带有称为“bill”的文本的属性吗?如果它可以这样工作,我可以如何处理代码?谢谢!
    • 如果您的所有按钮都具有相同的类,那么仅获取特定按钮将是一项艰巨的任务。根据我的经验,我无法将我的 XPATH 格式用于 onclick 属性。由于您在评论中提到了“我的按钮”一词,我认为这是您自己的网页。因此,请尝试为您的按钮添加唯一的 ID 和名称。通过这种方式,XPATH 格式将被唯一标识。谢谢
    • 这也是您可以访问多个常用按钮的另一种方式。使用 find_elements_by_xpath 而不是 find_element_by_xpath 并使用索引来指定按钮。在您的示例中,假设您在控制台中搜索并且具有相同属性的按钮数量分别为“remarks”、“check”和“bill”,然后您可以使用 driver.find_elements_by_xpath[("")[2].click()。我觉得这个方法比上面说的好!
    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2016-04-29
    • 2022-11-18
    • 2017-05-28
    相关资源
    最近更新 更多