方法一:使用IE对象(模拟浏览器操作)
' 创建IE对象
Set ie = CreateObject("InternetExplorer.Application")
' 设置IE可见性(调试时可设为True)
ie.Visible = True
ie.Navigate "https://example.com/login"
' 等待页面加载完成
Do While ie.Busy Or ie.ReadyState <> 4
WScript.Sleep 100
Loop
' 填写登录表单
ie.Document.getElementById("username").Value = "your_username"
ie.Document.getElementById("password").Value = "your_password"
' 提交表单(根据具体页面选择方式)
' 方式1:点击提交按钮
ie.Document.getElementById("submitBtn").Click
' 方式2:调用表单submit方法
' ie.Document.forms(0).Submit
' 等待登录完成
Do While ie.Busy Or ie.ReadyState <> 4
WScript.Sleep 100
Loop
' 可以继续后续操作,如跳转到其他页面
ie.Navigate "https://example.com/dashboard"
' 关闭IE(可选)
' ie.Quit
Set ie = Nothing
方法二:使用XMLHTTP发送POST请求
' 适用于简单的表单提交
Dim url, postData, xmlhttp
url = "https://example.com/login"
postData = "username=your_username&password=your_password"
Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
' 发送POST请求
xmlhttp.Open "POST", url, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.Send postData
' 获取响应(包含可能的Cookie)
responseText = xmlhttp.responseText
' 保存Cookie供后续请求使用
cookie = xmlhttp.getResponseHeader("Set-Cookie")
' 如果需要处理重定向或使用会话
If InStr(responseText, "登录成功") > 0 Then
' 登录成功,访问需要登录的页面
Set xmlhttp2 = CreateObject("MSXML2.XMLHTTP")
xmlhttp2.Open "GET", "https://example.com/dashboard", False
' 设置Cookie
If Len(cookie) > 0 Then
xmlhttp2.setRequestHeader "Cookie", cookie
End If
xmlhttp2.Send
dashboardContent = xmlhttp2.responseText
End If
Set xmlhttp = Nothing
完整示例:带错误处理的登录脚本
Option Explicit
Dim ie, url, username, password
Dim maxWaitTime, startTime
' 配置参数
url = "https://example.com/login"
username = "your_username"
password = "your_password"
maxWaitTime = 30000 ' 最大等待时间30秒
On Error Resume Next
' 创建IE对象
Set ie = CreateObject("InternetExplorer.Application")
If Err.Number <> 0 Then
WScript.Echo "无法创建IE对象: " & Err.Description
WScript.Quit 1
End If
' 配置IE
ie.Visible = True
ie.Silent = True ' 不显示脚本错误
ie.AddressBar = False
ie.ToolBar = False
ie.StatusBar = False
' 导航到登录页面
ie.Navigate url
' 等待页面加载
startTime = Timer
Do While (ie.Busy Or ie.ReadyState <> 4) And (Timer - startTime) * 1000 < maxWaitTime
WScript.Sleep 500
Loop
If ie.Busy Or ie.ReadyState <> 4 Then
WScript.Echo "页面加载超时"
ie.Quit
WScript.Quit 1
End If
' 填写登录信息
TrySetValue ie, "username", username
TrySetValue ie, "password", password
' 提交登录
TryClickButton ie, "submitBtn"
' 等待登录完成
WScript.Sleep 2000
startTime = Timer
Do While (ie.Busy Or ie.ReadyState <> 4) And (Timer - startTime) * 1000 < maxWaitTime
WScript.Sleep 500
Loop
' 检查是否登录成功
If InStr(ie.Document.body.innerHTML, "登录成功") > 0 Or _
InStr(ie.LocationURL, "dashboard") > 0 Then
WScript.Echo "登录成功!"
' 这里可以添加登录后的操作
' 例如:截图、获取数据等
Else
WScript.Echo "登录失败"
End If
' 保持浏览器打开,或关闭
' ie.Quit
Set ie = Nothing
WScript.Echo "脚本执行完成"
' 辅助函数:尝试设置表单值
Sub TrySetValue(ieObj, elementId, value)
On Error Resume Next
Dim elem
Set elem = ieObj.Document.getElementById(elementId)
If Err.Number = 0 And Not elem Is Nothing Then
elem.Value = value
Else
' 尝试其他选择器
Err.Clear
Set elem = ieObj.Document.getElementsByName(elementId)(0)
If Err.Number = 0 And Not elem Is Nothing Then
elem.Value = value
End If
End If
On Error Goto 0
End Sub
' 辅助函数:尝试点击按钮
Sub TryClickButton(ieObj, buttonId)
On Error Resume Next
Dim btn
Set btn = ieObj.Document.getElementById(buttonId)
If Err.Number = 0 And Not btn Is Nothing Then
btn.Click
Else
' 尝试表单提交
Err.Clear
If ieObj.Document.forms.Length > 0 Then
ieObj.Document.forms(0).Submit
End If
End If
On Error Goto 0
End Sub
注意事项
IE兼容性:方法一需要IE浏览器,Windows 10/11中可能需要启用IE模式
元素定位:使用开发者工具(F12)查看实际的元素ID、name或class
延迟等待:根据网络速度和服务器响应调整等待时间
安全性:不要在脚本中硬编码密码,考虑使用加密或从外部文件读取
验证码:如果网站有验证码,需要额外处理(可能需要OCR或人工干预)
会话管理:某些网站使用复杂的会话机制,可能需要处理Cookie和重定向
替代方案建议
对于复杂的Web自动化,建议考虑:
- Python + Selenium:功能更强大,支持多种浏览器
- PowerShell:Windows系统内置,支持.NET的Web请求
- 专用自动化工具:如UiPath、AutoIt等
根据具体需求选择合适的方法,简单的登录任务使用VBScript可以快速实现,但复杂的交互建议使用更现代的工具。