硒 - 点击某个位置

时间:2013-05-29 06:49:25

标签: python selenium

使用Selenium的Python版本,是否可以单击DOM中的某个元素并指定要单击它的坐标? Java版本有方法clickAt,它实际上正是我正在寻找的,但在Python中找不到相应的。

4 个答案:

答案 0 :(得分:31)

应该这样做!即你需要使用webdriver的动作链。一旦有了这个实例,你只需注册一系列动作,然后调用perform()来执行它们。

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.google.com")
el=driver.find_elements_by_xpath("//button[contains(string(), 'Lucky')]")[0]

action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(el, 5, 5)
action.click()
action.perform()

这会将鼠标向下移动5个像素,从按钮的左上角开始向右移动5个像素我很幸运。然后它将click()

请注意,必须使用perform()。否则什么都不会发生。

答案 1 :(得分:5)

您感到困惑的原因是clickAt是旧的v1(Selenium RC)方法。

WebDriver的概念略有不同,'Actions'

具体来说,'行动' Python绑定的构建器实时here

clickAt命令的想法是点击某个位置 relative 到特定元素。

使用'操作'在WebDriver中可以实现同样的效果。助洗剂。

希望updated documentation可以提供帮助。

答案 2 :(得分:1)

我个人并没有亲自使用过这种方法,但查看selenium.py的源代码,我发现以下方法看起来像他们想要的那样 - 他们希望包装{{1} }:

clickAt

它们出现在selenium对象中,这是online API documentation

答案 3 :(得分:0)

您可以使用Edge浏览器中的python动作链来执行任务,

from selenium.webdriver import ActionChains
actionChains = ActionChains(driver)
button_xpath  = '//xapth...' 
button = driver.find_element_by_xpath(button_xpath)
actionChains.move_to_element(button).click().perform()

但是有时Action链找不到DOM元素。因此,更好的选择是通过以下方式使用execute scipt:

button_xpath  = '//xapth...' 
button = driver.find_element_by_xpath(button_xpath)
driver.execute_script("arguments[0].click();", button)