点击列表项目与selenium(python)

时间:2018-02-02 00:17:10

标签: python html selenium xpath

有一个网站包含以下HTML-Code-snippet:

<li class="quest" data-questid="Battle_02" data-category="battle">
<img src="img/x.gif" alt="" class="reward">
<a href="#">Versteck bauen</a>
</li>

我想点击此列表项。内嵌img的唯一列表项。我找到了带有xpath的项目。并试图点击它们。我试着和#34; li&#34;令牌:

xpath = "//img[@class='reward']/parent::*"

使用img:

xpath = "//img[@class='reward']

使用&#34; a href&#34;:

xpath = "//img[@class='reward']//following::*"

然后我尝试使用以下代码点击它:

click_me = self.browser.find_element_by_xpath(xpath)
click_me.click()

但我得到的元素在点异常时无法点击。

所以我尝试了一个动作:

action = ActionChains(self.browser)
action.move_to_element(click_me).click().perform()

和:

action.move_to_element(click_me).move_by_offset(4,0).click().perform()

我没有收到任何错误,但它仍然无效。

编辑: 二手镀铬驱动器2.31。切换到2.34解决了我的问题!

3 个答案:

答案 0 :(得分:0)

你可以通过在中间添加build()函数来尝试,例如:

action.move_to_element(click_me).move_by_offset(4,0).click().build().perform()

build()函数用于将Action类函数拼接在一起。

答案 1 :(得分:0)

如果您想点击列表项,您已尝试以下内容:

  • xpath =“// img [@ class ='reward'] / parent :: *”:它引用<img>标记的父级,可能无法正常工作

  • xpath =“// img [@ class ='reward'] :可能无效,因为它没有任何onClick()事件。

    < / LI>
  • xpath =“// img [@ class ='reward'] //关注:: *”:将找到<img>文档中的所有节点节点

解决方案

您可以使用以下任何选项:

  • 使用link_text

    self.browser.find_element_by_link_text("Versteck bauen").click()
    
  • 使用xpath

    self.browser.find_element_by_xpath("//li[@class='quest' and @data-category='battle']//a[contains(normalize-space(), 'Versteck bauen')]").click()
    
  

注意:如果您仍然面对元素在点上无法点击... 异常refer to this discussion

答案 2 :(得分:0)

请更新问题以列出您使用的浏览器和浏览器版本,webdriver版本? chromdriver 2.33在点击任何不在视口中的元素时都有一个已知问题。如果您使用此版本,请使用2.34或更高版本。 - yong