我有一个按钮,我试图点击并需要该群组的帮助。这个按钮位于我的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)
答案 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']
虽然你的尝试不起作用,因为,
elem = driver.find_element_by_id("38579").click()
这不起作用,因为下面没有“id”属性匹配的元素,“data-id”与“id”不同
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()
与上面的#2类似,在点击您想要的元素之前,某些内容可能会随机失败
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;。