我想将光标移动到一个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.
答案 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)
在我看来,来自ImageHorizonLibrary的Eficode可能对您有用。该库适用于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或其他此类工具是一个更好的主意。