这是一个非常常见的需求,比如自动登录网站、提交表单等,整个过程主要分为以下几个步骤:
- 准备工作:安装必要的支持库。
- 打开网页:让程序打开目标网页。
- 定位元素:找到需要填写的输入框、按钮等。
- :向定位到的元素输入文本或点击。
- 处理图片:找到验证码图片,下载并显示,等待用户输入。
- 提交表单:点击提交按钮完成操作。
第一步:准备工作
易语言本身不直接支持复杂的网页操作,我们需要借助第三方支持库,最常用的是 “网页访问支持库”,文件名通常是 ie.fne 或 web.fne。
- 下载支持库:你可以从易语言相关的论坛、资源站搜索“易语言 网页访问支持库”进行下载。
- 安装支持库:下载后,将
.fne文件复制到易语言的..\程序集\目录下(D:\易语言\程序集\),重启易语言,你就可以在“程序集”中看到它了。
第二步:创建程序并打开网页
我们创建一个易语言窗口程序,并添加一个按钮“打开网页”,用于加载目标页面。
示例代码:
.版本 2
.程序集 网页访问支持库
.子程序 _按钮_打开网页_被单击
.局部变量 ie浏览器, internet_explorer
' 创建一个IE浏览器对象
ie浏览器.创建 ()
' 导航到目标网页
' 这里以一个测试网站为例,你可以替换成任何你需要的网页
ie浏览器.导航到 ("https://example.com/login")
' 可选:等待页面加载完成
.计次循环首 (100, )
(ie浏览器.读取属性 ("readyState") = "complete")
跳出循环 ()
否则
延时 (100)
.
.
.计次循环尾 ()
' 显示提示信息
信息框 ("网页已打开,请稍候...", 0, )
代码解释:
.程序集 网页访问支持库:声明我们使用这个支持库。internet_explorer是支持库中定义的一个类,代表一个IE浏览器实例。ie浏览器.创建 ():在内存中创建一个浏览器窗口(此时不可见)。ie浏览器.导航到 ("..."):让浏览器开始加载指定的URL。.计次循环首...:这是一个简单的等待机制,检查浏览器是否加载完成(readyState属性为complete)。
第三步:定位网页元素
网页填表的核心是找到正确的输入框,定位元素通常有以下几种方法:
- 根据ID:最可靠的方法,如果元素有唯一的ID。
- 根据Name:也比较常用。
- 根据Class Name:适用于有特定样式的元素。
- 根据Tag Name:
<input>- 根据XPath:最强大但最复杂,可以精确定位任意元素。
假设我们要填写的表单如下:
<form action="/submit" method="post">
<input type="text" id="username" name="user" placeholder="请输入用户名">
<input type="password" id="password" name="pwd" placeholder="请输入密码">
<img src="/captcha.php" id="captcha_img" alt="验证码">
<input type="text" id="code" name="code" placeholder="请输入验证码">
<button type="submit" id="submit_btn">登录</button>
</form>
定位代码示例:
.子程序 _按钮_填写用户名_被单击
.局部变量 ie浏览器, internet_explorer
.局部变量 用户名输入框, htmlelement
' 获取之前创建的浏览器对象 (这里简化处理,实际应用中可能需要全局变量)
ie浏览器 = 取程序集窗口 (0, ).标签 ("ie浏览器") ' 假设我们把浏览器对象放在了窗口上
' 方法1:通过ID定位
用户名输入框 = ie浏览器.获取元素 ("username")
' 方法2:通过Name定位
' 用户名输入框 = ie浏览器.获取元素 ("user")
' 方法3:通过XPath定位 (更强大)
' 用户名输入框 = ie浏览器.获取元素 ("//input[@id='username']")
' 如果成功找到元素
(用户名输入框.取到元素 ())
' 在输入框中输入文本
用户名输入框.设置属性 ("value", "我的用户名")
信息框 ("用户名已填写", 0, )
' 可以让输入框获得焦点
用户名输入框.聚焦 ()
' 模拟按下回车键 (可选)
' ie浏览器.发送按键 (13) ' 13 是回车键的键码
.
否则
信息框 ("未找到用户名输入框!", 0, )
.
代码解释:
ie浏览器.获取元素 ("username"):这是最简单直接的方法,通过元素的id来获取。用户名输入框.取到元素 ():检查是否成功定位到元素,避免后续操作出错。用户名输入框.设置属性 ("value", "我的用户名"):找到<input>元素后,通过修改其value属性来填入内容。
第四步:处理验证码图片
验证码是自动化的难点,因为它通常是为了防止机器操作,最合理的方案是:程序自动下载图片,让用户肉眼识别并输入,程序再帮用户填进去。
步骤:
- 定位到
<img>- 获取其
src属性(图片的URL)。- 使用
inet或wininet等支持库下载该URL的图片文件到本地。- 在易语言窗口上添加一个“图片框”控件,将下载的图片显示出来。
- 添加一个“输入框”让用户输入看到的验证码。
- 程序读取用户输入,填入到网页的验证码输入框中。
- 获取其
示例代码(下载并显示验证码):
.版本 2
.程序集 网页访问支持库
.程序集 inet ' 用于下载文件
.子程序 _按钮_获取验证码_被单击
.局部变量 ie浏览器, internet_explorer
.局部变量 验证码图片元素, htmlelement
.局部变量 图片网址, 文本型
.局部变量 下载结果, 逻辑型
' 获取浏览器对象
ie浏览器 = 取程序集窗口 (0, ).标签 ("ie浏览器")
' 定位验证码图片
验证码图片元素 = ie浏览器.获取元素 ("captcha_img")
(验证码图片元素.取到元素 ())
' 获取图片的src属性
图片网址 = 验证码图片元素.读取属性 ("src")
' 如果src是相对路径,需要补全为绝对路径
(取文本左边 (图片网址, 7) ≠ "http://")
图片网址 = "https://example.com" + 图片网址 ' 假设网站域名是 example.com
.
' 定义本地保存路径
.如果真 (写到文件 ("C:\temp\captcha.jpg", 到字节集 (inet_读文件 (图片网址)), , 假) = 真)
' 显示图片到窗口的图片框
取程序集窗口 (0, ).图片框_验证码.图片 = ("C:\temp\captcha.jpg")
信息框 ("验证码已获取,请在下方输入框填写", 0, )
.否则
信息框 ("下载验证码失败!", 0, )
.
.
否则
信息框 ("未找到验证码图片!", 0, )
.
代码解释:
验证码图片元素.读取属性 ("src"):获取图片的源地址。inet_读文件 (图片网址):使用inet支持库的函数将网络图片读入内存(返回字节集)。写到文件 ("...", 到字节集 (...), , 假):将内存中的图片字节集保存为本地文件。取程序集窗口 (0, ).图片框_验证码.图片 = "...":将本地图片文件路径赋值给窗口上的图片框控件,使其显示。
第五步:完整流程整合
我们将所有步骤整合到一个完整的程序流程中。
窗口设计:
- 一个
ie浏览器控件(用于嵌入网页) - 一个“打开网页”按钮
- 一个“获取验证码”按钮
- 一个“自动登录”按钮
- 一个“验证码图片”框
- 一个“请输入验证码”输入框
易语言代码逻辑:
.版本 2
.程序集 网页访问支持库
.程序集 inet
.全局变量 ie浏览器, internet_explorer ' 全局变量,方便各个子程序访问
.子程序 _按钮_打开网页_被单击
.局部变量 目标网址
目标网址 = "https://example.com/login" ' 替换为你的目标网址
' 创建并嵌入浏览器到窗口的ie控件中
ie浏览器.创建 ()
ie浏览器.嵌入到 (取程序集窗口 (0, ).ie浏览器.取窗口句柄 ())
ie浏览器.导航到 (目标网址)
.计次循环首 (100, )
(ie浏览器.读取属性 ("readyState") = "complete")
跳出循环 ()
.
延时 (100)
.
.计次循环尾 ()
信息框 ("网页已打开", 0, )
.子程序 _按钮_获取验证码_被单击
.局部变量 验证码图片元素, htmlelement
.局部变量 图片网址, 文本型
.局部变量 临时目录
' 确保浏览器已加载
(ie浏览器.取到元素 () = 假)
信息框 ("请先打开网页!", 0, )
返回 ()
.
验证码图片元素 = ie浏览器.获取元素 ("captcha_img")
(验证码图片元素.取到元素 ())
图片网址 = 验证码图片元素.读取属性 ("src")
' ... (路径补全逻辑,同上) ...
临时目录 = 取运行目录 () + "\captcha.jpg"
.如果真 (写到文件 (临时目录, 到字节集 (inet_读文件 (图片网址)), , 假) = 真)
取程序集窗口 (0, ).图片框_验证码.图片 = 临时目录
.
.
否则
信息框 ("未找到验证码图片!", 0, )
.
.子程序 _按钮_自动登录_被单击
.局部变量 用户名框, 密码框, 验证码框, 登录按钮, htmlelement
.局部变量 用户输入的验证码, 文本型
' 1. 填写用户名
用户名框 = ie浏览器.获取元素 ("username")
(用户名框.取到元素 ())
用户名框.设置属性 ("value", "testuser")
.
' 2. 填写密码
密码框 = ie浏览器.获取元素 ("password")
(密码框.取到元素 ())
密码框.设置属性 ("value", "testpass")
.
' 3. 填写验证码 (从用户输入框获取)
用户输入的验证码 = 取程序集窗口 (0, ).编辑框_验证码输入.内容
验证码框 = ie浏览器.获取元素 ("code")
(验证码框.取到元素 ())
验证码框.设置属性 ("value", 用户输入的验证码)
.
' 4. 点击登录按钮
登录按钮 = ie浏览器.获取元素 ("submit_btn")
(登录按钮.取到元素 ())
登录按钮.触发事件 ("click")
信息框 ("已提交登录信息,请观察网页变化。", 0, )
.
否则
信息框 ("未找到登录按钮!", 0, )
.
重要注意事项与进阶技巧
-
元素定位失败:这是最常见的问题,请确保:
- 网页已经完全加载。
id、name等属性值正确无误。- 可以使用浏览器的“开发者工具”(按F12)来检查元素,确认其准确的
id、class或XPath。
-
动态加载的网页:很多现代网站(特别是单页应用 SPA)内容是 JavaScript 动态加载的。
ie.fne可能无法在readyState为complete时就捕获到所有元素,你可能需要更长的等待时间,或者通过监控网络请求等方式来判断元素是否真的加载完成。 -
iframe 嵌套:如果表单在
<iframe>内,你需要先切换到iframe,然后再定位元素。.局部变量 iframe元素, htmlelement iframe元素 = ie浏览器.获取元素 ("my_iframe_id") ' 获取iframe (iframe元素.取到元素 ()) ' 切换焦点到iframe ie浏览器.切换框架 (iframe元素) ' 现在在iframe内部定位元素 用户名框 = ie浏览器.获取元素 ("username") ' 操作完成后,切回主文档 ie浏览器.切换框架 (0) ' 0 代表主文档 . . -
模拟人类操作:为了更像真人,可以在输入后加入短暂的延时。
用户名框.设置属性 ("value", "testuser") 延时 (300) ' 延时300毫秒 -
处理弹窗:如果网站有
alert或confirm弹窗,程序可能会卡住,可以在操作前先关闭所有弹窗。ie浏览器.关闭弹出窗口 () -
使用更强大的库:
ie.fne基于 IE 浏览器,速度较慢且对现代网页支持不佳,如果你需要更高效、更稳定的解决方案,可以考虑学习使用WebView2相关的支持库,它基于微软的 Edge 浏览器核心,性能更好,兼容性更强,是目前网页自动化的主流方向,使用WebView2的学习曲线会更陡峭一些。
