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