【问题标题】:How to find and click a JavaScript button by aria-label with Python Selenium?如何使用 Python Selenium 通过 aria-label 查找并单击 JavaScript 按钮?
【发布时间】:2021-06-30 07:45:35
【问题描述】:

我正在尝试使用 Python Selenium 在页面上找到某个 javascript 按钮并单击它。之前,您单击离开或链接到另一个页面,论坛上的其他解决方案不适用于我的情况。首先,我将展示一个充满按钮的页面图像。 我正在尝试点击名为“Schoology”的按钮。

接下来,我将继续显示我尝试单击的某个按钮的外部 HTML 代码 -

<application _ngcontent-bxy-c60 tabindex="0" role="link" class="cl-app app-margin ng-star-inserted" _nghost-bxy-c57 aria-label="Schoology">

如果更容易阅读,这里是一个屏幕截图。

我想点击的 Schoology 按钮是 JavaScript。在使用EC.presence_of_all_elements_located 的Web Driver Wait 功能以确保我在正确的页面上之后,我继续尝试单击按钮。我尝试了一些方法,但都失败了

1.使用 XPATH 查找元素

driver.execute_script("document.getElementsByXpath('/html/body/app-root/secure/div/app-apps-container/application[8]').click()").

这导致了document.getElementByXpath is not a function 错误。

2。使用类名查找元素

driver.execute_script("document.getElementsByClassName('cl-app app-margin ng-star-inserted')[0].click()")

这里的问题是每个 JavaScript 按钮都有完全相同的类。当我使用这行代码时,脚本执行并单击了第一个按钮(AP Human Geography)而不是我想要的 Schoology 按钮。

有没有办法使用 Aria-Label 做到这一点?

我注意到 Aria-Label 确实可以区分和识别每个 JavaScript 按钮。就我而言,它说"aria-label = "Schoology"。但是,我不确定这将如何实施。我如何使用诸如 Aria-Label 之类的东西来确保脚本单击正确的 JavaScript 按钮。请记住,我需要这样做,以使脚本不会选择错误的按钮(即单击第一个按钮,因为它们都具有相同的类名)

这是内部 HTML 代码的屏幕截图,以防万一这将是解决问题的更好方法。

【问题讨论】:

    标签: javascript python html selenium automation


    【解决方案1】:
    driver.find_element_by_xpath("//application[@aria-label='Schoology']//button")
    

    你可以使用它的 xpath 和 data 属性。我假设您需要单击其按钮标签。如果不删除 //按钮。

    【讨论】:

      【解决方案2】:

      使用选择器的方法是输入以下查询:

      application[aria-label$="Schoology"]
      

      或者你可以使用 XPath:

      //application[@aria-label="Schoology"]
      

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 2018-12-27
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 2021-04-10
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        相关资源
        最近更新 更多