【问题标题】:Having trouble clicking on a button using id, xpath, class, etc使用 id、xpath、类等点击按钮时遇到问题
【发布时间】:2018-04-01 18:36:42
【问题描述】:

我有一个按钮,我想点击它,需要小组的帮助。此按钮位于我的 wordpress 网站的后端/管理区域(我正在尝试将数据大量上传到目录列表系统中)。我在想我需要使用按钮类,因为在同一页面上有两个具有相同编号的 data-id 元素。我已经提供了我的 selenium 代码 (python) 尝试以及我试图访问的 html。任何帮助表示赞赏!

HTML:

<div class="pkg-button">
    <a data-id="38579" class="btn btn-lg btn-primary button select-plan">Select</a>
</div>

这是具有冲突 id 的 html 代码 sn-p。

<ul data-price="0"  data-subscribed='0' data-id="38579" data-type="1"  class="packagelistitems " >

=============

代码方法一:

elem = driver.find_element_by_id("38579").click()

代码方法二:

driver.find_element_by_class_name('btn btn-lg btn-primary button select-plan').click()

代码方法三:

elements = driver.find_elements_by_class_name("btn btn-lg btn-primary button select-plan")
for e in elements:
    e.click()

代码方法四:

driver.find_element_by_xpath('//*[@id="plan"]/div[1]/ul/li/div/div/div[2]/div[2]/a').click()

对于最后一个代码 sn-p (#4),我收到以下错误:

selenium.common.exceptions.WebDriverException: Message: unknown error: Element <a data-id="38579" class="btn btn-lg btn-primary button select-plan">...</a> is not clickable at point (659, 14). Other element would receive the click: <div id="wpadminbar" class="">...</div>
  (Session info: chrome=61.0.3163.100)
  (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.15063 x86_64)

【问题讨论】:

    标签: python selenium button xpath webdriver


    【解决方案1】:

    尝试:

    driver.find_element_by_xpath("//div[@class='pkg-button'] [a[text()='Select']]").click()
    

    这样你选择带有class="pkg-button"的元素

    【讨论】:

    • 在代码的点击事件行上,我收到以下错误:selenium.common.exceptions.WebDriverException: Message: unknown error: Element ... 在点 (627, 14) 不可点击。其他元素会收到点击:
      ...
      (Session info: chrome=61.0.3163.100) (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform =Windows NT 10.0.15063 x86_64)
    • 在没有额外说明的情况下单击 pkg 按钮是个坏主意,因为它可能不是唯一的
    • @VitaliyMoskalyuk 你是对的。我重新编辑了答案
    • 页面上有多个“选择”按钮(即,它们与列表的产品包有关)。我使用 MRI xpath 突出显示工具(IE 的书签),它使用以下字符串突出显示所有选择按钮://div[@class='pkg-button']
    • 重试了您的编辑。获取:selenium.common.exceptions.WebDriverException:消息:未知错误:元素
      ...
      在点 (627, 14) 不可点击。其他元素会收到点击:
      ...
    【解决方案2】:

    不清楚为什么元素不可点击(可能你应该点击div 包装器而不是a 元素),所以试试这些,应该可以)

    点击div:

    //div[@class='pkg-button'][a[text()='Select']]
    

    点击a标签

    //div[@class='pkg-button']/a[text()='Select']
    
    //a[text()='Select']
    

    重要提示:请注意,在方法 4 中,您收到错误,其中 id 为 wpadminbar 的元素与您的项目重叠,因此请在浏览器开发工具中检查以确保某些 div 不是您想要的重叠元素点击 =)

    【讨论】:

    • 我使用“find_element_by_xpath”、“.click()”使用了所有 3 个字符串。错误是: div 字符串:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:“/div[@class='pkg-button' ][a[text()='Select']]"} 标签 #1:selenium.common.exceptions.WebDriverException:消息:未知错误:元素 ... 在点 (627, 14) 不可点击。其他元素会收到点击:
      ...
    • 标签 #2:selenium.common.exceptions.WebDriverException:消息:未知错误:元素 ... 在点 (627, 14) 处不可点击。其他元素会收到点击:
      ...
    【解决方案3】:

    find_element_by_id 正在搜索唯一的 id 属性,而不是像 data-id 这样的自定义命名属性

    试试这个:

    driver.find_element_by_xpath("//a[@data-id='38579']").click()

    【讨论】:

    • 获得以下信息:selenium.common.exceptions.WebDriverException:消息:未知错误:元素 ... 在点 (627, 14) 处不可点击。其他元素会收到点击:
      ...
    【解决方案4】:

    你可以试试

    linkText 直接因为它与 Text 的链接

    find_element_by_link_text("Select")

    CSS

    div.pkg-button&gt;a[data-id='38579']

    div[class='pkg-button']&gt;a[data-id='38579']

    或者最后是 XPATH

    .//div[@class='pkg-button']/a[text()='Select']

    虽然你的尝试没有成功,因为,

    1. elem = driver.find_element_by_id("38579").click()这不起作用,因为下面没有匹配“id”属性的元素,“data-id”与“id”不同

    2. driver.find_element_by_class_name('btn btn-lg btn-primary button select-plan').click() 这个选择器很宽泛。可能有许多可用的元素,它可能会点击你可能不想要的东西

    3. elements = driver.find_elements_by_class_name("btn btn-lg btn-primary button select-plan") for e in elements: e.click() 与上面的 #2 类似,在点击您想要的元素之前,某些内容可能会随机失败

    4. driver.find_element_by_xpath('//*[@id="plan"]/div[1]/ul/li/div/div/div[2]/div[2]/a').click() 这只是使选择器变脆的方法,我不希望它起作用。你也不能用这样的选择器编写 selenium 脚本,你的自动化将在左、右和中心失败。

    【讨论】:

      【解决方案5】:

      你可能想看看使用 find_element_by_css_selector。 对于上述内容,使用您的浏览器,在感兴趣的 html 代码部分,单击“复制”,然后单击“复制选择器”。

      How to css selector.

      【讨论】:

      • 我能够使用下面提到的代码解决问题。我的问题是我正在与页面底部的对象进行交互,但我试图单击的按钮位于页面的中间。似乎我要与之交互的对象在脚本交互时必须是物理可见的。这是真的?我认为所有对象都加载到内存中并且可以随机访问。有人请对此发表评论。 driver.find_element_by_xpath('//*[@id="plan"]/div[1]/ul/li/div/div/div[2]/div[2]/a').click()
      • 是的。在 selenium 中,元素必须是可见且难以处理的,否则您将无法完成操作。这更像是模拟用户操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2015-02-10
      • 1970-01-01
      相关资源
      最近更新 更多