Python 在使用id、xpath、类等单击按钮时遇到问题

Python 在使用id、xpath、类等单击按钮时遇到问题,python,selenium,button,xpath,webdriver,Python,Selenium,Button,Xpath,Webdriver,我有一个按钮,我正试图点击,需要一些帮助组。这个按钮位于我的wordpress站点的后端/管理区域(我正在尝试将数据批量上传到目录列表系统)。我认为我需要使用button类,因为在同一页上有两个数据id元素具有相同的编号。我已经提供了我的selenium代码(python)尝试以及我试图访问的html。谢谢你的帮助 HTML: 编码方法2: driver.find_element_by_class_name('btn btn-lg btn-primary button select-plan')

我有一个按钮,我正试图点击,需要一些帮助组。这个按钮位于我的wordpress站点的后端/管理区域(我正在尝试将数据批量上传到目录列表系统)。我认为我需要使用button类,因为在同一页上有两个数据id元素具有相同的编号。我已经提供了我的selenium代码(python)尝试以及我试图访问的html。谢谢你的帮助

HTML:

编码方法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)
selenium.common.exceptions.WebDriverException:消息:未知错误:元素。。。在点(659,14)处不可单击。其他元素将收到单击:。。。
(会话信息:chrome=61.0.3163.100)
(驱动程序信息:chromedriver=2.33.506120(E3E534376286C0BC2D2DC9AA4915BA81D9023F),平台=Windows NT 10.0.15063 x8664)
试试:

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

通过这种方式,您可以使用
class=“pkg button”

选择元素,但不清楚为什么元素不可单击(可能您应该单击
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没有与您要单击的元素重叠=)

按id查找元素
正在搜索唯一的
id
属性,非自定义命名属性,如
数据id

试试这个:

驱动程序。通过xpath(“//a[@data id='38579']”)查找元素。单击()

您可以尝试

直接链接文本,因为它是与文本的链接

find\u element\u by\u link\u text(“选择”)

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。按\u id(“38579”)查找\u元素。\u单击()
    这不起作用,因为下面没有与“id”属性匹配的元素,“数据id”不同于“id”

  • 驱动程序。通过类名称(“btn btn lg btn主按钮选择计划”)查找元素。单击()。可能有很多元素可用,它可以点击一些你可能不想要的东西

  • elements=driver.通过类名称查找元素(“btn btn lg btn主按钮选择计划”)
    对于元素中的e:
    e、 单击()
    与上面的第2步类似,在单击您想要的元素之前,某些东西可能会随机失败

  • driver。通过xpath('/*[@id=“plan”]/div[1]/ul/li/div/div/div/div/div[2]/div[2]/a')查找元素。单击()
    
    这只是一种简单的选择方法,我不希望它起作用。您也不能使用这样的选择器编写selenium脚本,您的自动化将失败


  • 您可能想看看如何使用find_元素按css_选择器。 对于以上内容,请使用浏览器,在感兴趣的html代码的右侧,单击“复制”,然后单击“复制选择器”


    在代码的单击事件行上,我收到以下错误:selenium.common.exceptions.WebDriverException:消息:未知错误:元素。。。在点(627,14)处不可单击。其他元素将收到单击:。。。(会话信息:chrome=61.0.3163.100)(驱动程序信息:chromedriver=2.33.506120(e3e534346286c0bc2dc9aa4915ba81d9023f),platform=windowsnt 10.0.15063 x86_64)在没有附加规范的情况下单击pkg按钮是个坏主意,因为它可能不是unique@VitaliyMoskalyuk你是对的。我重新编辑了答案页面上有多个选择按钮(即,它们与列表中的产品包有关)。我使用MRI xpath高亮显示工具(IE的bookmarklet),它使用以下字符串高亮显示所有选择按钮://div[@class='pkg-button']重试编辑。获取:selenium.common.exceptions.WebDriverException:消息:未知错误:元素。。。在点(627,14)处不可单击。其他元素将收到单击:…获取以下内容:selenium.common.exceptions.WebDriverException:消息:未知错误:元素。。。在点(627,14)处不可单击。其他元素将收到单击:…请参阅:我使用了所有3个字符串,使用了“find_element_by_xpath”、“.click()”。错误包括:div字符串:selenium.common.exceptions.NoSuchElementException:Message:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/div[@class='pkg-button'][a[text()='Select']]”标记#1:selenium.common.exceptions.WebDriverException:消息:未知错误:元素。。。在点(627,14)处不可单击。其他元素将收到单击:…标记#2:selenium.common.exceptions.WebDriverException:消息:未知错误:元素。。。在点(627,14)处不可单击。其他元素将收到点击:…我能够用下面提到的代码解决问题。我的问题是,我正在与页面底部的一个对象交互,但我试图单击的按钮位于页面的中间。似乎我想要与之交互的对象必须在脚本交互时在物理上可见。这是真的吗?我认为所有对象都加载到内存中,可以随机访问。请有人对此发表评论。驱动程序。通过xpath('/*[@id=“plan”]/div[1]/ul/li/div/div/div/div[2]/div[2]/a')查找元素。单击()是。在selenium中,元素必须可见且难以处理,否则您将无法完成操作。这更像是模拟用户操作。
    driver.find_element_by_xpath("//div[@class='pkg-button'] [a[text()='Select']]").click()
    
    //div[@class='pkg-button'][a[text()='Select']]
    
    //div[@class='pkg-button']/a[text()='Select']
    
    //a[text()='Select']