当前位置: 首页 > 面试题库 >

通过selenium的类人鼠标移动

阎德宇
2023-03-14
问题内容

故事:

像Google ReCaptcha一样,解决验证码的方法之一就是尝试 模仿人的鼠标动作 :移动,悬停和点击。

一些用户报告说,随着B样条曲线的作用而使鼠标移动。

问题:

如何通过selenium将鼠标移动到遵循B样条轨迹的特定元素上?

请注意,常规browser.actions().mouseMove(elm).perform();会直接且太快地“跳转”到元素。我的理解是,这是放慢移动速度的问题,它遵循B样条轨迹的数学模型从点到点平滑地“跳跃”。

我们正在使用量角器/ JavaScript,但问题实际上与语言无关。
请注意,我不是要解决验证码问题,也不是为了“解决验证码问题,使新的恶意机器人违反此处和此处的使用条款”做出贡献。我只是好奇并渴望在测试自动化领域获得更多技能。


问题答案:

您可以scipy.interpolate像在这个问题中看到的那样使用B样条曲线插值。

在这里,我将使用 B样条 示例之一来获取x和的值y

import numpy as np
import scipy.interpolate as si

# Curve base:
points = [[0, 0], [0, 2], [2, 3], [4, 0], [6, 3], [8, 2], [8, 0]];
points = np.array(points)

x = points[:,0]
y = points[:,1]


t = range(len(points))
ipl_t = np.linspace(0.0, len(points) - 1, 100)

x_tup = si.splrep(t, x, k=3)
y_tup = si.splrep(t, y, k=3)

x_list = list(x_tup)
xl = x.tolist()
x_list[1] = xl + [0.0, 0.0, 0.0, 0.0]

y_list = list(y_tup)
yl = y.tolist()
y_list[1] = yl + [0.0, 0.0, 0.0, 0.0]

x_i = si.splev(ipl_t, x_list) # x interpolate values
y_i = si.splev(ipl_t, y_list) # y interpolate values

使用x和值y,您可以使用以下方法移动鼠标光标ActionChains

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

url = "https://codepen.io/falldowngoboone/pen/PwzPYv"
driver = webdriver.Chrome(executable_path="/home/selenium/chromedriver2.25")
driver.get(url)

action =  ActionChains(driver);

startElement = driver.find_element_by_id('drawer')

# First, go to your start point or Element:
action.move_to_element(startElement);
action.perform();

for mouse_x, mouse_y in zip(x_i, y_i):
    action.move_by_offset(mouse_x,mouse_y);
    action.perform();
    print(mouse_x, mouse_y)


 类似资料:
  • 任务是将物理光标移动到元素。 尝试以下操作: 和以下内容:

  • 我需要移动我的鼠标指针。我用的是硒和c。 MoveByOffset和MoveToElement都在执行右键单击,但鼠标指针没有移动。

  • 我有一个特别的问题。用例是在搜索元素后转到搜索结果。但是,单击搜索按钮后,鼠标指针会无限旋转,直到有人移动鼠标指针。问题是,即使我应用了偏移移动,鼠标指针仍处于旋转位置。整个页面嵌套在一个框架中。移动偏移在以前的方法中是有效的,但不是为了这个,我附加了屏幕截图和代码,在屏幕截图中无法捕获鼠标指针 截图

  • 我想将鼠标移动到某个位置(0,0)。在上一次点击操作之后,我实际上需要将鼠标从该位置移开,因为它会干扰我需要执行的下一个操作。 我发现遵循Java代码这是一个完美的起点,但我无法将其翻译成VBA并适应我的需要。 资料来源: 如何使用Java在Selenium WebDriver中执行鼠标悬停功能? https://www.guru99.com/keyboard-mouse-events-files

  • ================================ 操作系统:Win7 硒:2.33.0 Firefox:22.0 Python:2.7.4 ================================ 我想用“move_to_element”方法将鼠标光标移动到元素“input”上,但不能这样做。 有人有这个问题吗? ==============================