在影刀里点一个按钮,至少有4种方式:模拟鼠标点击、点击元素、鼠标移动+点击、强制点击。 新手经常随便选一个,结果点不上或者报错。
不同场景用不同模式:普通按钮用“点击元素”,隐藏元素用“模拟鼠标点击”,悬浮菜单用“鼠标移动+点击”,弹出层用“强制点击”。
一、四种点击模式速览
| 指令名称 | 实现原理 | 适用场景 | 稳定性 |
|---|---|---|---|
| 点击元素(标准) | 直接调用元素点击事件 | 普通按钮、链接、复选框 | ⭐⭐⭐⭐⭐ |
| 模拟鼠标点击 | 模拟鼠标在坐标位置点击 | canvas画布、Flash、地图坐标 | ⭐⭐⭐ |
| 鼠标移动+点击 | 先移动鼠标到元素,再点击 | 悬浮菜单、hover触发的下拉 | ⭐⭐⭐⭐ |
| 强制点击 | 绕过可见性检查直接点击 | 被遮挡的元素、弹出层穿透 | ⭐⭐(慎用) |
原则:优先用“点击元素”。其他3种只有在标准点击失败时才用。
二、点击元素(标准模式):90%场景用它
指令位置:左侧“鼠标键盘” → “点击元素”。
这是影刀最稳定的点击指令,直接调用浏览器的元素点击事件。
操作步骤
- 捕获目标元素(按钮/链接/图片等)
2. 右侧详情面板可设置“模拟点击”和“点击后等待”
- 建议勾选“点击后等待”,自动加0.3秒缓冲
# 配置示例

点击元素://button[text()='登录']
# 可选:模拟点击(勾选后更接近真人操作)
# 可选:点击后等待0.3秒
什么时候用不了:
- 元素被其他层遮挡(比如弹窗覆盖)
- 元素设置display:none(不可见)
- 元素在canvas画布里
遇到上面情况,换其他模式。
三、模拟鼠标点击:对付canvas和地图
指令位置:左侧“鼠标键盘” → “模拟鼠标点击”。
不是点击元素,而是在屏幕某个坐标位置点击。
操作步骤
- 先捕获一个参照元素(比如画布容器)
- 设置相对偏移量(x轴偏移、y轴偏移)
- 设置点击类型(左键/右键/双击)
# 场景:点击canvas画布上的某个图形(无法捕获元素)
# 步骤1:捕获canvas容器
捕获元素://canvas[@id='game-canvas'] # 参照元素
# 步骤2:模拟点击,设置偏移量(相对canvas左上角)
模拟鼠标点击:参照元素=canvas容器

X偏移:200像素
Y偏移:150像素
点击类型:左键
# 场景2:地图上的某个POI(用坐标点击)
模拟鼠标点击:屏幕坐标(850, 420)
如何找到偏移量?
- 用“捕获元素”找到canvas容器
- 在浏览器F12里用鼠标悬停,看左上角坐标
- 或者截图量像素(不精确,靠试)
容易踩的坑: 屏幕分辨率改变或浏览器缩放后,偏移量会失效。建议用“获取元素位置”指令动态计算。
# 动态计算偏移量:先获取元素的位置和尺寸
获取元素位置://canvas[@id='game-canvas'] → 存入(左上角x, y, 宽, 高)
# 然后模拟点击:x = 左上角x + 200
四、鼠标移动+点击:对付悬浮菜单和hover效果
指令位置:左侧“鼠标键盘” → “鼠标移动” + “点击元素”组合。
很多电商的二级菜单、下拉选项,需要鼠标先移上去才会出现。
操作步骤
- 先用“鼠标移动”移到触发元素(如一级菜单)
- 加一个短等待(0.3-0.5秒),等浮层出现
- 再用标准“点击元素”点浮层中的目标
# 场景:淘宝顶部“我的淘宝”悬浮菜单,点击“已买到的宝贝”
# 步骤1:鼠标移动到“我的淘宝”按钮上
鼠标移动://a[contains(text(),'我的淘宝')]
# 步骤2:等待浮层出现(不用太长,0.5秒足够)
固定等待:0.5秒
# 步骤3:点击浮层中的“已买到的宝贝”
点击元素://div[@class='menu-popup']//a[contains(text(),'已买到的宝贝')]
注意: 浮层出现后,移动鼠标直接点可能会让浮层消失(因为鼠标离开了触发区)。解决办法:用“鼠标移动”先把鼠标移到浮层上(可加中间点),再点击。
# 更好的写法:鼠标平滑移动到目标
鼠标移动://a[contains(text(),'我的淘宝')]
固定等待:0.3秒
# 鼠标移动到浮层内(随便一个元素)
鼠标移动://div[@class='menu-popup']
固定等待:0.2秒
# 再点击目标
点击元素://div[@class='menu-popup']//a[contains(text(),'已买到的宝贝')]
五、强制点击:最后一招
指令位置:在“点击元素”指令详情面板,勾选**“强制点击”**。
标准点击失败时,勾选这个选项会绕过可见性检查,强行触发点击。
适用场景
- 元素被其他div遮挡但实际可点
- 元素在滚动视窗外(但影刀会自动滚动)
- 弹出层里的元素被遮罩挡住
# 示例:弹出层关闭按钮被遮罩挡住了,标准点不上
点击元素://div[@class='popup']//button[text()='关闭']
勾选:强制点击
什么时候不能用强制点击:
- 元素真的不存在或XPath错了(强制也没用)
- 元素在iframe里没切换上下文
- 需要先hover才能出现的元素
警告: 强制点击不保证有正常的效果。比如点击后触发的js可能因为元素不可见而不执行。能不用就不用。
六、实战:登录页面的点击选择
一个典型登录页面有多种点击场景,综合运用:
# 1. 点击“账号密码登录”标签(标准点击)
点击元素://div[contains(text(),'账号登录')]
# 2. 输入用户名密码(省略)
# 3. 点击登录按钮(如果被安全控件遮挡,用强制点击)
判断元素是否存在://button[text()='登录']
如果 存在 == True
点击元素://button[text()='登录'] # 先标准
否则
点击元素://button[text()='登录'] 勾选强制点击
# 4. 登录后可能出现验证码弹窗(鼠标移动+点击)
鼠标移动://div[@class='captcha-popup'] # 移到弹窗上
固定等待:0.2秒
点击元素://img[@class='captcha-img'] # 点击验证码图片刷新
七、点击模式选择决策树(手机版)
需要点击?
│
├─ 元素是普通按钮/链接/复选框 → 点击元素(标准)
│
├─ 元素在canvas/Flash/地图里 → 模拟鼠标点击
│
├─ 需要hover才能出现的菜单 → 鼠标移动+点击元素
│
├─ 标准点不上且报“元素不可见” → 强制点击
│
└─ 点了没反应但没报错 → 改“模拟鼠标点击”
八、易错速查表
| 错误现象 | 原因 | 解决方法 |
|---|---|---|
| 点不上但没报错 | 元素需要hover才可点 | 改用“鼠标移动”先悬停 |
| 报错“元素不可见” | 元素被遮挡或display:none | 勾选“强制点击”或滚动到元素 |
| 点错位置(点到隔壁) | 元素范围大,点击坐标有偏差 | 用“鼠标移动”到元素中心再点 |
| canvas里的点不准 | 偏移量硬编码了 | 用“获取元素位置”动态计算 |
| 悬浮菜单一闪而过 | 鼠标离开触发区太快 | 鼠标移动到浮层上再等待0.3秒 |
九、推荐资源
- 影刀官方示例流程:“鼠标悬浮菜单自动化”(在流程市场搜索)
- 我的经验:90%的点不上问题,换“鼠标移动+点击元素”就能解决,而不是用强制点击
- 调试技巧:运行前在影刀里右键点击指令,选“执行到此指令”,观察鼠标行为
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
