相比于selenium使用ActionChains类型进行鼠标的操作,playwright可直接在page对象使用鼠标操作。
操作方法
page.mouse的常用方法
方法 | 说明 |
click() | 点击对应坐标x,y |
down() | 鼠标左键按下状态 |
up() | 鼠标左键抬起状态 |
move() | 鼠标移动到对应坐标 |
dbclick() | 鼠标双击对应坐x,y |
wheel() | 鼠标滚轮滑动滚动x,y(滚动条操作) |
page也有元素拖拽方法:drag_and_drop(),可以把元素source拖拽到元素target位置,在需要坐标系上进行拖拽时,例如画布上的复杂拖拽操作还是要使用mouse通过x,y坐标进行拖拽。
可以通过上述方法的组合以及获取元素的坐标实现对元素的拖拽操作,示例说明代码如下:
element = page.locator('[id=kw]')
location = element.bounding_box()
# 获取元素的中心坐标
x = location['x'] + location['width']/2
y = location['y'] + location['height']/2
# 移动到元素下鼠标左键按下状态
page.mouse.move(x=x, y=y, steps=10)
page.mouse.down()
# 拖拽到坐标下鼠标坐标抬起释放元素
page.mouse.move(x=x+100, y=y+200, steps=20)
page.mouse.up()
move方法中的steps参数表示执行的步骤,步骤值越高move的动作就越慢(有时候执行太快,前端拖拽时,无法触发js的响应,导致拖拽无效)
如下为实现的效果图,实际代码跟示例代码有所差别,核心方法都是一样的(主要是没找到对外都可访问的画布网站,抱歉)