在Python中将光标物理移动到Web元素

时间:2017-03-16 19:03:50

标签: python selenium selenium-chromedriver robotframework pyautogui

我想将光标移动到一个web元素(不是模拟它)并按住shift键并按偏移量单击另一个元素。

我使用pyautogui:

获取了保持shift键并单击第二个元素
import pyautogui

pyautogui.keyDown('shift')
pyautogui.moveRel(0, 62)
pyautogui.click()
pyautogui.keyUp('shift')

我的问题是将鼠标物理移动到原始网页元素,然后执行上述代码。 Pyautogui提供了移动到绝对x,y协调员的选项,但在我的情况下它不起作用,因为web元素的绝对位置发生了变化。

知道我该怎么办?最好是在python(pyautogui,selenium等)?

浏览器是chrome,OS是OS X.

3 个答案:

答案 0 :(得分:0)

(不幸的是,我只能与硒谈论硒)

您可以使用Selenium Actions,即(样本为C#)

new Actions(driver)
    .MoveToElement(element1)
    .KeyDown(Keys.Shift)
    .MoveByOffset(offset)
    .Click(element2)
    .KeyUp(Keys.Shift)
    .Perform();

如果你正在使用Java,那么(从我已经阅读的内容)中还有一些机器人的概念用于这类事情,即参见这个帖子https://stackoverflow.com/a/12978079/3110529

答案 1 :(得分:0)

在我看来,来自ImageHorizonLibraryEficode可能对您有用。该库适用于Linux和Windows并移动鼠标。

下面是两步鼠标移动的示例脚本。该库还有一些点击选项Keywords,因为这似乎是合乎逻辑的下一步行动。

*** Settings ***
Library    ImageHorizonLibrary

*** Test Cases ***

Mouse Test
    Sleep    2Sec
    Move To    345     345
    Sleep    2Sec
    Move To    1800    720

答案 2 :(得分:0)

如果您想继续使用PyAutoGUI,我建议您使用图像识别功能。在网页中截取元素的屏幕截图,然后将屏幕截图裁剪为元素(使用MS Paint甚至在线裁剪工具)。

然后运行:

>>> x, y = pyautogui.locateCenterOnScreen('croppedscreenshot.png')
>>> pyautogui.moveTo(x, y)
>>> pyautogui.keyDown('shift')
>>> pyautogui.click(x, y)
>>> pyautogui.keyUp('shift')

这当然是脆弱且容易出错的。它依赖于屏幕上可见的元素,如果您使用的浏览器与截图不同,则可能无效。

使用Selenium或其他此类工具是一个更好的主意。