在影刀里往输入框填内容,有“输入文本”和“模拟输入”两个指令。 新手经常混着用,结果有的输入框死活填不进去,或者输入法状态导致漏字。
核心区别:“输入文本”直接设置元素的值,速度快但不触发键盘事件;“模拟输入”逐个字符敲进去,更像真人但容易受输入法影响。
一、两个指令速览对比
| 指令名称 | 原理 | 速度 | 触发事件 | 适用场景 |
|---|
| 输入文本 | 直接修改元素的value属性 | 极快(瞬间) | 不触发键盘/输入事件 | 普通输入框、隐藏域、下拉搜索 |
| 模拟输入 | 模拟键盘逐字敲入 | 慢(每个字符几十毫秒) | 触发keydown/keyup/input | 有实时校验、自动补全、密码框 |
原则:80%的场景用“输入文本”。遇到输入后没反应、搜索框不自动联想、密码框填不进时,换“模拟输入”。
二、输入文本:最快最稳的首选
指令位置:左侧“鼠标键盘” → “输入文本”。
操作步骤
- 捕获目标输入框元素
- 在右侧详情面板填写“文本内容”(支持变量)
- 可选“清空原有内容”(勾选后先Ctrl+A删掉旧内容)
# 配置示例
输入文本://input[@id='search-keyword']
文本内容:{搜索关键词}
勾选:清空原有内容
# 社区版建议:清空前加0.1秒等待,避免清空和输入冲突
为什么快? 它直接改DOM元素的value属性,浏览器不触发键盘事件。
什么时候不能用:
- 网站用React/Vue等框架监听了input事件(输入后页面没反应)
- 密码框有特殊加密控件
- 输入框有“输入联想”功能(如淘宝搜索框)
上面这些情况,输入文本后页面就像没收到内容一样。换模拟输入。
三、模拟输入:逐个字符触发事件
指令位置:左侧“鼠标键盘” → “模拟输入”。
操作步骤
- 先确保输入框已获得焦点(先点击一下)
- 拖动“模拟输入”到画布
- 设置文本内容和输入速度(毫秒/字符)
# 完整示例:淘宝搜索框自动补全
# 步骤1:点击搜索框获得焦点
点击元素://input[@id='q']
# 步骤2:模拟输入,触发联想
模拟输入://input[@id='q']
文本内容:"连衣裙"
每个字符间隔:50毫秒 # 默认30ms,网络慢可调高到80ms
勾选:输入前清空
# 步骤3:等待联想下拉出现
等待元素出现://div[@class='sug-list'],超时3秒
# 步骤4:点击第一个联想词
点击元素://div[@class='sug-list']//li[1]
模拟输入的参数细节:
- 每个字符间隔:默认30毫秒。太快可能被网站风控识别为机器人,建议50-80ms。
- 输入前点击:勾选后会先点一下输入框,确保焦点。
- 输入后回车:勾选后输完自动按回车,适合直接搜索。
容易踩的坑: 输入法状态。中文输入法下,模拟输入会变成拼音串。解决方案:
# 解法1:输入前先按Shift切英文(模拟按键)
模拟按键:Shift
固定等待:0.2秒
模拟输入:内容="keyword"
# 解法2:在输入文本前加一个英文状态检查(推荐)
# 用“获取元素属性”判断输入框的lang或ime-mode,但比较麻烦
# 最稳:Windows系统下把默认输入法设为英文
四、实战场景1:普通登录表单(用输入文本)
大多数登录页面,用户名和密码框不需要触发事件。
# 用输入文本就够了
输入文本://input[@name='username'],内容="admin",清空
输入文本://input[@name='password'],内容="123456",清空
点击元素://button[text()='登录']
如果密码框有特殊控件(比如银行的密码插件),输入文本可能失效。这时候模拟输入也不一定管用,需要“模拟按键”逐个按。
五、实战场景2:带实时校验的表单(用模拟输入)
很多注册页面,输入手机号后实时校验格式、发送验证码按钮才亮。
# 场景:注册页手机号输入框,输入后自动检测是否已注册
# 用输入文本,检测不会触发,按钮还是灰色
# 必须用模拟输入
点击元素://input[@placeholder='手机号']
模拟输入://input[@placeholder='手机号']
文本内容:"13812345678"
每个字符间隔:60毫秒
# 等待校验结果
等待元素出现://span[contains(text(),'可用')] 或 //span[contains(text(),'已注册')]
如何判断该用哪个? 在浏览器里手动输入,如果输入后有“实时校验”“自动补全”“下拉联想”,就用模拟输入。如果没有,输入文本即可。
六、实战场景3:多行文本/富文本框(两者结合)
富文本编辑器(如商品描述)往往需要先输入文本,再模拟输入触发事件。
# 方案1:如果编辑器支持直接设置HTML
输入文本://div[@contenteditable='true'],内容="<p>商品描述</p>"
# 方案2:不支持时,用模拟输入+等待
点击元素://div[@class='editor-body'] # 获得焦点
模拟输入:文本内容="详细描述内容...",间隔50ms
注意: 富文本框的内容区域可能被iframe包裹。需要先切换iframe上下文,再输入。
七、性能对比:什么时候用哪个决策表
| 场景 | 推荐指令 | 原因 |
|---|---|---|
| 普通搜索框(无联想) | 输入文本 | 快,省时间 |
| 电商搜索框(有联想) | 模拟输入 | 触发联想下拉 |
| 登录用户名/密码 | 输入文本 | 密码框通常没问题 |
| 注册表单(实时校验) | 模拟输入 | 触发校验逻辑 |
| 数据录入(大量重复) | 输入文本 | 模拟输入太慢 |
| 验证码输入框 | 输入文本 | 手动填验证码时 |
| 消息回复/评论 | 模拟输入 | 更像真人,防风控 |
| 文件上传路径输入 | 输入文本 | 直接填路径最快 |
社区版时长提醒: 模拟输入比输入文本慢很多(100个字符差3-5秒)。批量数据录入时用输入文本,能省下宝贵时长。
八、易错速查表
| 错误现象 | 原因 | 解决方法 |
|---|---|---|
| 输入后没显示内容 | 输入框有只读属性 | 先“点击元素”获取焦点,再模拟输入 |
| 输入后内容不全 | 输入框有长度限制 | 检查maxlength属性,分段输入 |
| 中文输入成拼音 | 输入法未切英文 | 输入前加“模拟按键:Shift”或改系统默认输入法 |
| 输入后联想不出现 | 用了输入文本(不触发事件) | 改用模拟输入 |
| 模拟输入太慢被风控 | 每个字符间隔太均匀 | 随机间隔(用Python随机数),或换输入文本 |
| 清空不彻底 | 默认清空只删文本,不删隐藏字符 | 手动“模拟按键:Ctrl+A + Delete” |
# 彻底清空输入框的万能写法
点击元素://input[@id='xxx']
模拟按键:Ctrl + A
模拟按键:Delete
推荐资源
- 影刀官方帮助中心:搜索“输入文本 vs 模拟输入”有对比视频
- Chrome插件:Input Events Viewer(可查看输入框触发了哪些事件)
- 我的经验:拿不准时先用输入文本,不行再换模拟输入。反过来先试模拟输入会浪费时间
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
