32

使用 Selenium 的 Python 版本,是否可以单击 DOM 中的某个元素并指定要单击它的坐标?Java版本有方法clickAt,它实际上完全符合我的要求,但在Python中找不到等价物。

4

4 回答 4

56

这应该做!也就是说,您需要使用来自 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(). 否则什么都不会发生。

于 2014-10-15T14:45:37.670 回答
7

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

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

具体来说,Python 绑定的“操作”构建器位于此处

该命令的想法是单击对于特定元素clickAt的某个位置。

使用“Actions”构建器在 WebDriver 中也可以实现相同的目标。

希望这个更新的文档可以提供帮助。

于 2013-05-29T08:24:03.780 回答
3

您可以使用 Edge 浏览器在 python 中使用 Action 链执行任务:

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 元素。因此,以下列方式使用执行 scipt 的更好选择:

button_xpath  = '//xapth...' 
button = driver.find_element_by_xpath(button_xpath)
driver.execute_script("arguments[0].click();", button)
于 2019-07-01T08:25:01.100 回答
2

我没有亲自使用过这种方法,但是通过查看源代码,selenium.py我发现以下方法看起来可以满足您的要求 - 它们看起来是 wrap clickAt

def click_at(self,locator,coordString):
    """
    Clicks on a link, button, checkbox or radio button. If the click action
    causes a new page to load (like a link usually does), call
    waitForPageToLoad.

    'locator' is an element locator
    'coordString' is specifies the x,y position (i.e. - 10,20) of the mouse      event relative to the element returned by the locator.
    """
    self.do_command("clickAt", [locator,coordString,])


def double_click_at(self,locator,coordString):
    """
    Doubleclicks on a link, button, checkbox or radio button. If the action
    causes a new page to load (like a link usually does), call
    waitForPageToLoad.

    'locator' is an element locator
    'coordString' is specifies the x,y position (i.e. - 10,20) of the mouse      event relative to the element returned by the locator.
    """
    self.do_command("doubleClickAt", [locator,coordString,])

它们出现在 selenium 对象中,这里是它们的在线 API 文档

于 2013-05-29T07:02:19.913 回答