影刀RPA新手教程:输入文本与模拟输入的区别——什么时候用哪个

在影刀里往输入框填内容,有“输入文本”和“模拟输入”两个指令。 新手经常混着用,结果有的输入框死活填不进去,或者输入法状态导致漏字。

核心区别:“输入文本”直接设置元素的值,速度快但不触发键盘事件;“模拟输入”逐个字符敲进去,更像真人但容易受输入法影响。

一、两个指令速览对比

指令名称原理速度触发事件适用场景

picture.image | 输入文本 | 直接修改元素的value属性 | 极快(瞬间) | 不触发键盘/输入事件 | 普通输入框、隐藏域、下拉搜索 | | 模拟输入 | 模拟键盘逐字敲入 | 慢(每个字符几十毫秒) | 触发keydown/keyup/input | 有实时校验、自动补全、密码框 |

原则:80%的场景用“输入文本”。遇到输入后没反应、搜索框不自动联想、密码框填不进时,换“模拟输入”。


二、输入文本:最快最稳的首选

指令位置:左侧“鼠标键盘” → “输入文本”。

操作步骤

  1. 捕获目标输入框元素
  2. 在右侧详情面板填写“文本内容”(支持变量)
  3. 可选“清空原有内容”(勾选后先Ctrl+A删掉旧内容)
# 配置示例
输入文本://input[@id='search-keyword']
    文本内容:{搜索关键词}
    勾选:清空原有内容
    

# 社区版建议:清空前加0.1秒等待,避免清空和输入冲突

为什么快? 它直接改DOM元素的value属性,浏览器不触发键盘事件。

什么时候不能用:

  • 网站用React/Vue等框架监听了input事件(输入后页面没反应)
  • 密码框有特殊加密控件
  • 输入框有“输入联想”功能(如淘宝搜索框)

上面这些情况,输入文本后页面就像没收到内容一样。换模拟输入。

picture.image

picture.image

picture.image

picture.image

三、模拟输入:逐个字符触发事件

picture.image 指令位置:左侧“鼠标键盘” → “模拟输入”。

picture.image

操作步骤

picture.image

  1. 先确保输入框已获得焦点(先点击一下)
  2. 拖动“模拟输入”到画布
  3. 设置文本内容和输入速度(毫秒/字符)
# 完整示例:淘宝搜索框自动补全
# 步骤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。
  • 输入前点击:勾选后会先点一下输入框,确保焦点。

picture.image

  • 输入后回车:勾选后输完自动按回车,适合直接搜索。

picture.image 容易踩的坑: 输入法状态。中文输入法下,模拟输入会变成拼音串。解决方案:

# 解法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学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论