2

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

我有按住 shift 键并单击第二个元素,使用 pyautogui:

import pyautogui

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

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

知道我该怎么做吗?最好在 python 中(pyautogui、selenium 等)?

浏览器是chrome,操作系统是OS X。

4

3 回答 3

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

于 2017-03-16T20:27:13.287 回答
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 或其他此类工具是一个更好的主意。

于 2017-03-28T23:35:33.890 回答
0

在我看来,来自Eficode 的ImageHorizo ​​nLibrary可能对您有用。该库可在 Linux 和 Windows 上运行并移动鼠标。

下面是一个两步鼠标移动的示例脚本。图书馆也有许多点击选项关键字,因为这似乎是合乎逻辑的下一步行动。

*** Settings ***
Library    ImageHorizonLibrary

*** Test Cases ***

Mouse Test
    Sleep    2Sec
    Move To    345     345
    Sleep    2Sec
    Move To    1800    720
于 2017-03-24T21:43:24.970 回答