1. 易语言网页自动填表工具概述
网页自动填表工具是许多办公场景中的刚需,特别是在需要批量处理表单数据或重复填写相同内容时。易语言作为一门中文编程语言,凭借其简单易学的特性,成为不少国内开发者快速实现这类工具的首选。我最近用易语言开发了一套完整的网页自动填表工具,不仅实现了基础的表单自动填充功能,还封装成了可复用的功能模块。
这套工具的核心价值在于:通过易语言的简洁语法和丰富组件,让即使没有专业编程背景的用户也能快速上手,实现网页表单的自动化操作。相比Python或JavaScript等语言的方案,易语言版本更符合中文用户的思维习惯,开发效率也更高。工具采用模块化设计,表单识别、数据填充、提交验证等功能都被封装成独立模块,方便在不同项目中复用。
提示:虽然易语言学习门槛低,但要开发稳定的自动化工具,仍需对网页DOM结构、事件触发机制等有基本了解。本工具已处理好这些底层细节,使用者只需关注业务逻辑即可。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开发环境与工具准备
2.1 易语言基础环境配置
首先需要安装易语言5.9及以上版本(官网可下载免费版)。安装时注意勾选"网页操作支持库"和"多线程支持库",这两个库是本工具的核心依赖。安装完成后,建议进行以下验证:
- 新建一个易程序,在代码编辑区输入:
easy复制信息框("Hello World", 0, "测试") - 运行程序应能正常弹出提示框
- 检查菜单【工具】->【支持库】中确认已加载"网页操作支持库"
2.2 辅助工具准备
开发网页自动化工具还需要以下辅助工具:
- Chrome浏览器(用于调试和元素定位)
- 网页元素探测工具(如易语言自带的"网页探测器")
- 文本编辑器(用于管理测试数据)
特别建议安装"网页探测器"组件,它可以直接嵌入到易语言开发环境中,通过可视化方式获取网页元素的ID、Name、XPath等定位信息,大幅提高开发效率。
3. 核心功能模块实现
3.1 网页自动化控制模块
这个模块封装了浏览器初始化和页面加载的基础操作:
easy复制.版本 2
.支持库 webbrowser
.子程序 初始化浏览器, 逻辑型
.参数 浏览器对象, 对象
.参数 是否可见, 逻辑型, 可空, 默认真
.局部变量 结果, 逻辑型
结果 = 浏览器对象.创建 (, 是否可视)
如果 (结果 = 假)
返回 (假)
结束
浏览器对象.静默 = 真 // 禁止弹出脚本错误
浏览器对象.等待加载超时 = 30000 // 30秒超时
返回 (真)
关键点说明:
- 创建浏览器对象时建议先设置为不可见,完成所有配置后再显示,避免闪烁
- 设置静默模式可避免网页JS错误干扰自动化流程
- 超时时间根据目标网站响应速度调整,一般30秒足够
3.2 表单元素定位模块
精准定位表单元素是自动填表的关键。本工具实现了三种定位方式:
-
通过ID定位(最快最可靠):
easy复制.子程序 通过ID填充文本, 逻辑型 .参数 元素ID, 文本型 .参数 填充值, 文本型 .局部变量 元素对象, 对象 元素对象 = 网页文档.取元素ByID (元素ID) 如果 (是否为空 (元素对象)) 返回 (假) 结束 元素对象.置焦点 () 元素对象.value = 填充值 返回 (真) -
通过Name定位(适用于没有ID的元素):
easy复制.子程序 通过Name填充文本, 逻辑型 .参数 元素Name, 文本型 .参数 填充值, 文本型 .局部变量 元素集合, 对象 .局部变量 i, 整数型 元素集合 = 网页文档.取元素ByName (元素Name) 如果 (元素集合.数量 = 0) 返回 (假) 结束 计次循环首 (元素集合.数量, i) 元素集合[i].value = 填充值 计次循环尾 () 返回 (真) -
通过XPath定位(最灵活):
easy复制.子程序 通过XPath填充文本, 逻辑型 .参数 XPath表达式, 文本型 .参数 填充值, 文本型 .局部变量 元素对象, 对象 元素对象 = 网页文档.取元素ByXPath (XPath表达式) 如果 (是否为空 (元素对象)) 返回 (假) 结束 元素对象.value = 填充值 返回 (真)
注意:实际使用中发现,某些网站会动态修改元素ID,这种情况下XPath定位更可靠。建议在工具中加入自动重试机制,当一种定位方式失败时尝试其他方式。
3.3 数据填充模块
不同类型表单元素需要不同的填充方式:
-
文本输入框(input/text):
easy复制元素对象.value = "要填充的文本" -
单选按钮(radio):
easy复制元素对象.checked = 真 -
复选框(checkbox):
easy复制如果 (需要选中) 元素对象.checked = 真 否则 元素对象.checked = 假 结束 -
下拉选择框(select):
easy复制.子程序 选择下拉选项, 逻辑型 .参数 下拉框对象, 对象 .参数 选项值, 文本型 .局部变量 选项集合, 对象 .局部变量 i, 整数型 选项集合 = 下拉框对象.options 计次循环首 (选项集合.长度, i) 如果 (选项集合[i].value = 选项值 或 选项集合[i].text = 选项值) 下拉框对象.selectedIndex = i - 1 返回 (真) 结束 计次循环尾 () 返回 (假) -
文件上传(input/file):
easy复制元素对象.value = "C:\path\to\file.jpg"
对于特殊表单(如富文本编辑器),可能需要先触发特定事件:
easy复制元素对象.置焦点 ()
元素对象.value = "富文本内容"
元素对象.触发事件 ("onchange")
3.4 表单提交与验证模块
表单填充完成后,通常需要模拟提交操作并验证结果:
easy复制.子程序 提交表单并验证, 逻辑型
.参数 表单对象, 对象
.参数 预期结果, 文本型, 可空
.局部变量 提交结果, 文本型
表单对象.submit ()
程序_延时 (3000) // 等待3秒让页面加载
// 验证方式1:检查页面标题
如果 (网页文档.取标题 () = 预期结果)
返回 (真)
结束
// 验证方式2:检查特定元素内容
提交结果 = 网页文档.取元素ByID ("result").innerText
如果 (寻找文本 (提交结果, "成功", , 假) > -1)
返回 (真)
结束
返回 (假)
4. 完整源码解析
4.1 主程序结构
主程序采用模块化设计,主要包含以下部分:
- 配置文件读取模块
- 网页控制模块
- 表单填充模块
- 日志记录模块
- 异常处理模块
核心流程如下:
easy复制.子程序 _启动子程序, 整数型
.局部变量 配置, 配置类
.局部变量 浏览器, 网页浏览器类
.局部变量 表单数据, 表单数据类
.局部变量 结果, 逻辑型
' 1. 初始化配置
如果 (配置.读取配置 () = 假)
信息框 ("配置读取失败!", 0, "错误")
返回 (0)
结束
' 2. 初始化浏览器
如果 (初始化浏览器 (浏览器, 假) = 假)
信息框 ("浏览器初始化失败!", 0, "错误")
返回 (0)
结束
' 3. 加载目标网页
浏览器.跳转 (配置.目标网址)
如果 (浏览器.等待加载完成 () = 假)
信息框 ("网页加载超时!", 0, "错误")
返回 (0)
结束
' 4. 填充表单
结果 = 填充表单 (浏览器.取文档 (), 表单数据)
如果 (结果 = 假)
信息框 ("表单填充失败!", 0, "错误")
返回 (0)
结束
' 5. 提交验证
如果 (提交表单并验证 (浏览器.取文档 (), 配置.预期结果) = 假)
信息框 ("提交验证失败!", 0, "错误")
返回 (0)
结束
信息框 ("自动填表成功完成!", 0, "提示")
返回 (0)
4.2 配置文件设计
采用INI格式配置文件,示例内容:
ini复制[General]
TargetURL=http://example.com/form
ExpectedResult=提交成功
[FormFields]
username=testuser
password=123456
gender=male
hobbies=reading|swimming
对应的配置读取类:
easy复制.类 配置类
.成员变量 目标网址, 文本型
.成员变量 预期结果, 文本型
.成员变量 表单字段, 文本型, , "0"
.方法 读取配置, 逻辑型
.局部变量 ini文件, 文本型
.局部变量 临时值, 文本型
.局部变量 i, 整数型
ini文件 = 取运行目录 () + "\config.ini"
如果 (文件是否存在 (ini文件) = 假)
返回 (假)
结束
' 读取通用配置
目标网址 = 读配置项 (ini文件, "General", "TargetURL", "")
预期结果 = 读配置项 (ini文件, "General", "ExpectedResult", "")
' 读取表单字段
清除数组 (表单字段)
计次循环首 (取配置节名数组 (ini文件, "FormFields", 表单字段), i)
临时值 = 读配置项 (ini文件, "FormFields", 表单字段[i], "")
表单字段[i] = 表单字段[i] + "=" + 临时值
计次循环尾 ()
返回 (真)
.方法结束
.类结束
4.3 表单数据处理
表单数据类负责解析和提供表单填充数据:
easy复制.类 表单数据类
.成员变量 字段表, 文本型, , "0"
.方法 取字段值, 文本型
.参数 字段名, 文本型
.局部变量 i, 整数型
.局部变量 字段对, 文本型, , "0"
计次循环首 (取数组成员数 (字段表), i)
字段对 = 分割文本 (字段表[i], "=", )
如果 (取数组成员数 (字段对) ≥ 2 且 字段对[1] = 字段名)
返回 (字段对[2])
结束
计次循环尾 ()
返回 ("")
.方法结束
.方法 取多选值, 文本型, , "0"
.参数 字段名, 文本型
.局部变量 值文本, 文本型
.局部变量 结果, 文本型, , "0"
值文本 = 取字段值 (字段名)
如果 (值文本 = "")
返回 (结果)
结束
结果 = 分割文本 (值文本, "|", )
返回 (结果)
.方法结束
.类结束
5. 实战应用与问题排查
5.1 典型应用场景
- 批量注册账号:自动填充注册表单,配合IP切换可实现批量注册
- 数据采集辅助:先自动填写搜索条件,再采集结果数据
- 日常办公自动化:自动填写周报、报销单等重复性表单
- 测试用例执行:自动化测试中的表单填充环节
5.2 常见问题与解决方案
问题1:元素定位失败
- 可能原因:页面未完全加载、元素在iframe中、元素是动态生成的
- 解决方案:
easy复制.子程序 安全定位元素, 对象 .参数 定位方式, 整数型 // 1=ID, 2=Name, 3=XPath .参数 定位值, 文本型 .参数 最大重试次数, 整数型, 可空, 默认3 .参数 重试间隔, 整数型, 可空, 默认1000 // 毫秒 .局部变量 元素对象, 对象 .局部变量 重试计数, 整数型 重试计数 = 0 循环判断首 () 重试计数 = 重试计数 + 1 判断 (定位方式) 情况 1: 元素对象 = 网页文档.取元素ByID (定位值) 情况 2: 元素对象 = 网页文档.取元素ByName (定位值) 情况 3: 元素对象 = 网页文档.取元素ByXPath (定位值) 结束 如果 (是否为空 (元素对象) = 假) 跳出循环 () 结束 如果 (重试计数 < 最大重试次数) 程序_延时 (重试间隔) 否则 跳出循环 () 结束 循环判断尾 (是否为空 (元素对象) 且 重试计数 < 最大重试次数) 返回 (元素对象)
问题2:表单提交后页面无变化
- 可能原因:提交被JS拦截、缺少隐藏字段、未触发必要事件
- 解决方案:
- 检查是否有onsubmit事件需要触发
- 使用开发者工具查看实际提交的请求参数
- 尝试直接发送POST请求而非表单提交
问题3:验证码识别
- 简单验证码可尝试OCR识别
- 复杂验证码需要人工干预或使用第三方识别服务
- 最佳实践是设计流程暂停机制,遇到验证码时暂停并提示用户手动输入
5.3 性能优化建议
-
延迟加载处理:
easy复制.子程序 智能等待, 逻辑型 .参数 条件表达式, 文本型 // 如"document.readyState === 'complete'" .参数 超时时间, 整数型, 可空, 默认10000 .局部变量 开始时间, 整数型 .局部变量 结果, 变体型 开始时间 = 取启动时间 () 循环判断首 () 结果 = 网页文档.执行脚本 (条件表达式) 如果 (结果.取逻辑值 () = 真) 返回 (真) 结束 如果 (取启动时间 () - 开始时间 > 超时时间) 返回 (假) 结束 程序_延时 (200) 循环判断尾 (真) -
多线程处理:对于批量任务,可使用多线程同时操作多个表单实例
-
资源释放:及时释放浏览器对象和DOM对象,避免内存泄漏
6. 功能模块的封装与复用
6.1 模块化设计
将核心功能封装为独立模块,方便在不同项目中复用:
-
网页操作模块(WebOp.e)
- 浏览器控制
- 页面导航
- 元素定位
-
表单处理模块(FormOp.e)
- 表单填充
- 表单提交
- 表单验证
-
配置管理模块(ConfigOp.e)
- 配置读取
- 数据解析
- 日志记录
6.2 模块调用示例
easy复制.版本 2
.支持库 WebOp
.支持库 FormOp
.支持库 ConfigOp
.子程序 自动填表示例
.局部变量 网页, 网页操作类
.局部变量 表单, 表单处理类
.局部变量 配置, 配置管理类
' 初始化
如果 (配置.初始化 () = 假 或 网页.初始化 () = 假)
返回 ()
结束
' 加载页面
网页.跳转 (配置.取目标网址 ())
' 填充表单
表单.设置网页文档 (网页.取文档 ())
如果 (表单.填充 (配置.取表单数据 ()) = 假)
返回 ()
结束
' 提交验证
如果 (表单.提交并验证 (配置.取预期结果 ()) = 假)
返回 ()
结束
6.3 扩展接口设计
为方便二次开发,模块提供了以下扩展点:
-
自定义元素定位器:
easy复制
.方法 设置自定义定位器 .参数 定位器回调, 子程序指针 自定义定位器 = 定位器回调 .方法结束 -
表单填充拦截器:
easy复制
.事件 表单填充前 .参数 字段名, 文本型 .参数 字段值, 文本型, 参考 .参数 是否跳过, 逻辑型, 参考 -
提交后处理器:
easy复制
.方法 设置提交处理器 .参数 处理器, 子程序指针 提交处理器 = 处理器 .方法结束
7. 源码打包与使用说明
完整源码包含以下部分:
- 主程序源码(.e文件)
- 功能模块(.ec文件)
- 示例配置文件
- 使用文档
使用步骤:
- 解压源码包到易语言项目目录
- 打开主程序文件(AutoFormFill.e)
- 修改config.ini配置目标网址和表单数据
- 编译运行
重要提示:首次使用时建议在测试网站验证功能,确认无误后再用于实际业务。某些网站可能有反自动化机制,使用前请确保符合相关规定。
