[英]mouse.up() not working after mouse.move()
我正在 Playwright Python 和 pytest 中编写测试,看看是否可以模拟鼠标的自动移动,使其看起来更像真实用户的移动。 我用的是从html和javascript写的本地html canvas,代码来自这里。 在请求 HTML canvas 文件之前,鼠标应该移动到浏览器中的点 (400,50) (在真实的 function 中,起点将随机化。否则,它将始终从 (0,0) 开始会让它看起来更像一个机器人)。 当 canvas 打开时,它应该使用WindMouse 算法从左到右绘制线,起点和终点的 x 值分别相同。 线与线之间不应该有任何线连接,除了从起点到第一条线的那条线。 这应该是因为在开始使用page.mouse.down()
按住鼠标左键之后,然后实际使用page.mouse.move()
从x=100
绘制到x=1200
,并在 100 范围内使用不同的 y 值到 1000,鼠标应该在page.mouse.up()
循环之外释放。
如下图所示,事实并非如此。 相反, page.mouse.up()
似乎没有在page.mouse.down()
和page.mouse.move()
之后执行。 我研究了一下,可能是因为当鼠标左键按住一定时间后,浏览器会把这个动作识别为鼠标拖动。 如果是这种情况,如何禁用浏览器自动切换鼠标动作识别的能力; 在这种情况下,它会禁止它在一定时间后自动识别page.mouse.down()
和page.mouse.move()
作为鼠标拖动? 如果不是这种情况,您如何使用 Playwright page.mouse.up()
解决此问题?
请看一下代码:
def test_drawing_board():
rel_path = r"/mats/drawing_board.html"
file_path = "".join([r"file://", os.getcwd(), rel_path])
with sync_playwright() as playwright:
# Fetch drawing board
browser = playwright.chromium.launch(headless=False, slow_mo=0.1)
page = browser.new_page()
page.mouse.move(400,50) # Place mouse in a random position in the browser before fetching the page
page.goto(file_path)
#Move mouse
start_point = 100
x = 1200
for y in range(100, 1000, 100):
# Generate mouse points
points = []
wm(start_point, y, x, y, M_0=15, D_0=12, move_mouse=lambda x, y: points.append([x, y]))
# Draw
page.mouse.down()
for point in points:
page.mouse.move(point[0], point[1])
page.mouse.up()
在“y”的每次迭代结束时,您都会发出鼠标弹起事件。 但是,在再次放下鼠标之前,您不会向新行的开头发出鼠标移动事件。
试试下面的代码:
for y in range(100, 1000, 100):
# Generate mouse points
points = []
wm(start_point, y, x, y, M_0=15, D_0=12, move_mouse=lambda x, y: points.append([x, y]))
page.mouse.up()
# Move mouse to start of new line
page.mouse.move(points[0][0], points[0][1])
# Mouse back down
page.mouse.down()
#Iterate the remaining points
for point in points[1:]:
page.mouse.move(point[0], point[1])
page.mouse.up()
在# Draw block
中,它应该包含一个page.mouse.move(start_point, y)
以按照@tomgalfin 的建议在每次绘制之前移动到行的开头,然后page.mouse.down()
。 为了测试在绘制第一行之前,鼠标是否在特定的 position 中,甚至在请求页面之前。 我想确认初始鼠标 position,并在它和第一行的开头 position 之间画一条线。这是通过在# Move mouse
loop as edited 之前添加page.mouse.down()
来实现的。 这是已解决的代码和结果
def test_drawing_board():
rel_path = r"/mats/drawing_board.html"
file_path = "".join([r"file://", os.getcwd(), rel_path])
with sync_playwright() as playwright:
# Fetch drawing board
browser = playwright.chromium.launch(headless=False, slow_mo=0.1)
page = browser.new_page()
page.mouse.move(400,50) # Place mouse in a random position in the browser before fetching the page
page.goto(file_path)
# Start points
start_point = 100
x = 1200
# Move mouse
page.mouse.down()
for y in range(100, 1000, 100):
# Generate mouse points
points = []
wm(start_point, y, x, y, M_0=15, D_0=12, move_mouse=lambda x, y: points.append([x, y]))
# Draw
page.mouse.move(start_point, y)
page.mouse.down()
for point in points:
page.mouse.move(point[0], point[1])
page.mouse.up()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.