使用id,xpath,class等点​​击按钮时遇到问题

时间:2017-10-20 14:45:30

标签: python selenium button xpath webdriver

我有一个按钮,我试图点击并需要该群组的帮助。这个按钮位于我的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代码段。

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

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

代码方法1:

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

代码方法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()

代码方法4:

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

对于最后一个代码段(#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)

5 个答案:

答案 0 :(得分:2)

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

点击div

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

点击a代码

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

//a[text()='Select']

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

答案 1 :(得分:0)

尝试:

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

以这种方式选择class="pkg-button"

元素

答案 2 :(得分:0)

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

试试这个:

driver.find_element_by_xpath(&#34; //一个[@数据-ID =&#39; 38579&#39;]&#34)。单击()

答案 3 :(得分:0)

你可以尝试

linkText,因为它与Text

的链接

find_element_by_link_text("Select")

的CSS

div.pkg-button>a[data-id='38579']

div[class='pkg-button']>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脚本,你的自动化将会左,右和中心失败。

答案 4 :(得分:0)

您可能希望查看使用find_element_by_css_selector。 对于上述内容,使用您的浏览器,直接在感兴趣的html代码部分,点击&#34;复制&#34;然后&#34;复制选择器&#34;。

How to css selector.