2017-10-20 93 views
1

我有一个按钮,我试图单击并需要组中的一些帮助。该按钮位于我的WordPress站点的后端/管理区域(我试图将数据上传到目录列表系统中)。我在想,我需要使用按钮类,因为在同一页上有两个具有相同编号的data-id元素。我提供了我的硒代码(python)尝试以及我试图访问的html。任何帮助赞赏!无法使用id,xpath,class等单击按钮

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),我发现了以下错误:

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

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

与尝试你选择元素的方式class="pkg-button"

+0

在你的代码的点击事件行,我发现了以下错误: selenium.common.exceptions.WebDriverException:消息:未知的错误:元素...是不是在点(627,14点击)。其他元素将收到点击:

...
(会话信息:铬= 61.0.3163.100) (驾驶员信息:chromedriver = 2.33.506120(e3e53437346286c0bc2d2dc9aa4915ba81d9023f),平台= Windows NT的10.0.15063 x86_64的) – user3280396

+0

@ user3280396我刚刚编辑答案 –

+1

坏主意点击pkg-button没有额外的规范,因为它可能不是唯一的 –

2

目前尚不清楚为什么元素不是cli ckable(可能是您应该点击div包装,而不是a元素),那么请尝试以下的东西应该工作)

点击div

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

点击a标签

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

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

重要提示:请注意,在method4中,您收到错误,其中编号为wpadminbar的元素与您的项目重叠,因此请检查第在浏览器的开发工具,以确保一些DIV是不是你想要点击重叠元素=)

+0

我使用“find_element_by_xpath”,“.click()”使用了所有3个字符串。错误是: div字符串: selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:“/ div [@ class ='pkg ')[] [a] [text()='Select']]“} a tag#1: selenium.common.exceptions.WebDriverException:消息:未知错误:元素...在点(627,14 )。其他元素将收到点击:

...
user3280396

+0

标签#2: selenium.common.exceptions.WebDriverException:消息:未知错误:元素...在点(627,14)处不可点击。其他元素将收到点击:

...
user3280396

0

find_element_by_id正在寻找独特id属性,而不是自定义命名的属性一样data-id

试试这个:

driver.find_element_by_xpath( “//一个[@数据-ID = '38579']”)。点击()

+0

获取以下内容:selenium.common.exceptions.WebDriverException:消息:未知错误:元素...在点(627,14)处无法单击。其他元素将收到点击:

...
user3280396

+0

引用此:https://stackoverflow.com/questions/11908249/debugging-element-is-not-clickable-at-point-error – Borna

0

你可以尝试

LINKTEXT直接因为它的一个使用文本链接

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()这个sel ector是广泛的。可能有很多可用的元素,它可以点击东西,你可能不希望

  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() 这只是脆弱的选择,我不指望它的工作方式。你也不可以用这样的选择器来编写硒脚本,你的自动化将失败,左,右和中心。

0

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

How to css selector.

+0

我能够解决问题的代码如下。我的问题是我正在与页面底部的一个对象进行交互,但是我尝试点击的按钮在页面中间。似乎我想与之交互的对象在脚本交互时必须在物理上可见。这是真的?我会认为所有的对象都被加载到内存中,并可以随机访问。有人请评论这一点。 driver.find_element_by_xpath('// * [@ id =“plan”]/div [1]/ul/li/div/div/div [2]/div [2]/a')。click() – user3280396

+0

是。在硒中元素必须是可见的和难处理的,否则你将无法完成该操作。这更像是模拟用户操作。 –