影刀RPA 网页表单自动填充:文本框、下拉框、单选复选框的完整处理
影刀RPA 网页表单自动填充:文本框、下拉框、单选复选框的完整处理
作者:林焱
表单填写是网页自动化里最高频的操作。注册账号、提交申请、录入数据、搜索筛选——背后都是表单填充。但很多新手在写表单自动化的时候,经常遇到:文本框填了但没生效、下拉框选不上、复选框点了但没勾上、提交后表单数据是空的。
这些问题90%是因为你只用了【填写输入框】和【点击】两个指令,没有针对不同表单控件做正确处理。这篇文章把网页上五类常见表单控件的自动化填充方法讲全。
一、文本输入框
1.1 普通文本框
最基本的表单控件,用【填写输入框】直接填:
【填写输入框】 目标元素:定位到输入框 填写内容:变量 user_name坑1:输入框有默认值没清空
有些输入框带了默认值(比如"请输入搜索关键词"),直接【填写输入框】会在默认值后面追加,而不是替换。
解决方法:填写前先清空
1. 【点击】点击输入框(获得焦点) 2. 【模拟按键】Ctrl+A(全选) 3. 【模拟按键】Delete(删除) 4. 【填写输入框】填入内容或者用【填写输入框】的"清空后填写"选项(如果有的话)。
坑2:输入框有输入长度限制
你填了20个字符,但输入框只接受10个,后面的被截断了。这种情况需要在填之前先检查长度,或者用模拟键盘逐字输入(有些输入框有实时校验,粘贴会触发不了校验逻辑)。
1.2 密码框
密码框和普通文本框的处理方式一样,用【填写输入框】就行。但有个坑:
坑:密码框有"显示密码"按钮
有些网站密码框旁边有个眼睛图标,点击后明文显示密码。如果你在密码框填写后点击了这个按钮,然后又触发了某些事件,可能导致密码框被清空。建议不要去点这个按钮,直接填写后提交。
1.3 富文本编辑器
有些网站的输入框不是标准的<input>或<textarea>,而是用div模拟的富文本编辑器(比如Quill、TinyMCE、UEditor)。
这类编辑器不能用【填写输入框】,因为目标不是一个input元素。处理方法:
方法一:点击编辑区域获得焦点,然后模拟键盘输入 1. 【点击】点击编辑区域 2. 【模拟按键】输入内容 方法二:通过JS直接设置内容 [video(video-RBoweVmO-1784737678555)(type-csdn)(url-https://live.csdn.net/v/embed/525000)(image-https://v-blog.csdnimg.cn/asset/23da3fe1f67a47106d725406cfde9a97/cover/Cover0.jpg)(title-拼多多店群自动化上架方案)] 【执行JavaScript】 document.querySelector('.editor-content').innerHTML = '要输入的内容'坑:富文本编辑器有延迟初始化
页面加载后编辑器还没初始化完,你点击编辑区域点了个寂寞。加一个【等待元素】等编辑器容器出现,再等1-2秒让它初始化完。
1.4 搜索联想框
搜索框输入文字后会弹出联想词列表,你需要从列表里选一个。
1. 【填写输入框】输入搜索词 2. 【等待元素】等待联想列表出现 3. 【获取元素列表】获取联想词列表 4. 遍历列表,找到匹配的项 5. 【点击】点击匹配项坑:输入太快联想没出来
用【填写输入框】一次性填入搜索词,有些网站不会触发联想(因为它监听的是键盘事件而不是值变化)。改用模拟键盘逐字输入可以解决:
【点击】点击搜索框 【模拟按键】逐字输入搜索词(每字间隔100ms) 【等待元素】等联想列表出现二、下拉框(Select)
2.1 原生Select下拉框
标准HTML的<select>元素,影刀有专门的【选择下拉框】指令:
【选择下拉框】 目标元素:定位到<select>元素 选择方式:按值选择 / 按文本选择 / 按索引选择 选择内容:变量 target_value三种选择方式的区别:
- 按值选择:选
<option value="1">中value属性为"1"的项 - 按文本选择:选显示文字为"选项A"的项
- 按索引选择:选第N个选项(从0开始)
坑:值和文本搞混了
<option value="01">北京市</option>,value是"01",文本是"北京市"。如果你用按文本选择却传了"01",选不上。搞清楚你要用哪个。
2.2 自定义下拉框
现在很多网站不用原生<select>,而是用div+JS模拟的下拉框。这类下拉框不能用【选择下拉框】指令,需要模拟手动操作:
1. 【点击】点击下拉框触发器(展开下拉列表) 2. 【等待元素】等待下拉选项出现 3. 【获取元素列表】获取所有选项 4. 遍历选项列表,匹配目标文本 5. 【点击】点击匹配的选项坑1:下拉列表是动态加载的
点击展开后选项还没加载完,【获取元素列表】拿到空列表。加一个【等待元素】等第一个选项出现。
坑2:选项太多需要滚动
有些下拉框只渲染可视区域内的选项(虚拟滚动),需要滚动才能看到后面的选项。这时候不能直接遍历列表,需要用JS滚动或者模拟键盘上下键:
1. 【点击】展开下拉框 2. 【点击】点击下拉框(获得焦点) 3. 循环: 【模拟按键】向下箭头  【获取元素文本】获取当前高亮项 如果匹配目标 → 【模拟按键】Enter2.3 级联选择器
省市区联动选择就是典型的级联选择器。选了省才能选市,选了市才能选区。
1. 【点击】展开省级选择器 2. 【点击】选择目标省份 3. 【等待元素】等待市级选择器数据加载 4. 【点击】展开市级选择器 5. 【点击】选择目标城市 6. 【等待元素】等待区级选择器数据加载 7. 【点击】展开区级选择器 8. 【点击】选择目标区坑:选了省之后市级数据还没加载
省的选择触发了API请求去获取市列表,但还没返回你就去点市级选择器了,结果是空的。每级选择后加一个等待,等下级选择器的选项加载完。
三、单选框(Radio)
单选框是一组互斥的选项,选了一个其他自动取消。
3.1 标准单选框
【点击】 目标元素:定位到目标选项的label或input坑:点击了input但没触发change事件
有些网站的逻辑绑在label的click事件上,直接点input不生效。解决办法是点击label元素,或者点击整个选项的容器div。
3.2 自定义单选框
用div模拟的单选框,外观好看但DOM结构复杂。定位的时候不要找<input type="radio">,要找那个自定义的容器元素。
定位策略: → 找到选项文本所在的元素 → 向上找到可点击的容器 → 点击容器坑:选项文本相同但值不同
一组单选框里有多个选项文本一样但值不同的情况(虽然不规范但确实存在)。这时候不能只按文本匹配,需要结合位置或value属性来定位。
四、复选框(Checkbox)
4.1 勾选单个复选框
1. 【获取元素属性】获取复选框的checked属性 2. 如果没勾选 → 【点击】勾选 3. 如果已勾选 → 不操作 4. 坑:重复点击取消勾选
你要勾选一个复选框,但它已经是勾选状态了,你又点了一下把它取消了。一定要先检查状态再决定是否点击。
4.2 批量勾选
需要勾选多个复选框中满足条件的项:
TEMU店群如何管理运营?
1. 【获取元素列表】获取所有复选框 2. 遍历列表: a. 【获取元素属性】获取每个复选框的值和checked状态 b. 如果值在目标列表里且未勾选 → 【点击】勾选 c. 如果值不在目标列表里且已勾选 → 【点击】取消勾选4.3 全选/反选
全选: 1. 【获取元素列表】获取所有复选框 2. 遍历,未勾选的全部点击勾选 反选: 1. 【获取元素列表】获取所有复选框 2. 遍历,逐个点击(已勾选的取消,未勾选的勾上)坑:全选按钮本身也是个复选框
有些表格表头的"全选"复选框也在你的元素列表里,遍历的时候把它也点了,导致逻辑混乱。需要用选择器排除掉表头的全选按钮。
五、表单提交
5.1 点击提交按钮
最简单的方式:
【点击】点击提交按钮 【等待元素】等待提交成功的提示出现坑:提交后页面跳转,等待元素找不到
提交后页面跳转到新页面,你在旧页面上等元素出现,当然等不到。提交后需要重新定位元素,或者等URL变化。
5.2 回车提交
有些搜索框没有搜索按钮,输入后按回车提交:
【填写输入框】输入搜索词 【模拟按键】Enter5.3 表单校验未通过
提交后表单校验失败(比如必填项没填),页面显示红色错误提示。这种情况:
1. 【点击】点击提交 2. 【等待元素】等待1秒 3. 检查是否有错误提示元素出现 4. 如果有 → 读取错误信息,记录日志 5. 如果没有 → 提交成功,继续后续操作坑:校验提示是toast一闪而过
有些错误提示是Toast消息,2秒后自动消失。如果你的等待时间太长,等去检查的时候Toast已经消失了。解决方案是用【执行JavaScript】监听Toast的出现,或者缩短等待时间。
六、完整表单填充模板
一个完整的表单填充流程模板:
1. 【打开网页】打开目标表单页面 2. 【等待元素】等待表单加载完成 3. 【点击】+【模拟按键】清空并填写用户名 4. 【点击】+【模拟按键】清空并填写密码 5. 【点击】+【模拟按键】清空并填写邮箱 6. 【点击】展开省份下拉框 7. 【等待元素】等选项出现 8. 【点击】选择目标省份 9. 【等待元素】等城市选项加载 10. 【点击】展开城市下拉框 11. 【点击】选择目标城市 12. 【获取元素属性】检查"同意条款"复选框状态 13. 如果未勾选 → 【点击】勾选 14. 【点击】点击提交按钮 15. 【等待元素】等待成功提示 / 检查错误提示 16. 【如果】成功 → 【日志输出】"表单提交成功" 17. 【如果】失败 → 【日志输出】"提交失败:{错误信息}"每一步都加了等待和检查,虽然代码量多了,但稳定性成倍提升。