VBA实现网站自动登录并点击p/tr标签内span链接的代码求助
VBA IE自动化登录后点击目标链接实现方案
前置说明
确保你的VBA工程已经提前引用了两个库:Microsoft Internet Controls、Microsoft HTML Object Library,否则代码会运行报错。
完整可运行代码
Sub Login_and_click_link() Dim IE As New SHDocVw.InternetExplorer Dim HTMLDoc As MSHTML.HTMLDocument Dim HTMLInput As MSHTML.IHTMLElement Dim HTMLDiv As MSHTML.IHTMLElement Dim HTMLAs As MSHTML.IHTMLElementCollection Dim HTMLA As MSHTML.IHTMLAnchorElement Dim targetSpan As MSHTML.IHTMLElement '新增变量存储目标跳转链接 'Open Internet Explorer and Navigate to PDDA With IE .Visible = True .Navigate "http://.TheWebsiteINeed.com" End With 'Loop until PDDA page has fully loaded Do While IE.ReadyState <> READYSTATE_COMPLETE Loop 'Search DOM for element by ID and input username Set HTMLDoc = IE.Document Set HTMLInput = HTMLDoc.getElementById("userName") HTMLInput.Value = Worksheets("sheet1").Range("letternumber").Text 'Search DOM for an element by ID and input password Set HTMLInput = HTMLDoc.getElementById("Password") HTMLInput.Value = Worksheets("sheet1").Range("letternumber").Text '如果密码和用户名不是同一个单元格请自行修改 'Search DOM for element by ID and click submit Set HTMLInput = HTMLDoc.getElementById("submit") HTMLInput.Click '=====以下为新增的跳转逻辑===== '1. 等待登录后页面加载完成 Do While IE.ReadyState <> READYSTATE_COMPLETE Or IE.Busy = True DoEvents Loop Set HTMLDoc = IE.Document '重新获取新页面的DOM对象 '2. 优先选择底部带id的Process链接(最稳定,推荐) Set targetSpan = HTMLDoc.getElementById("process") If Not targetSpan Is Nothing Then targetSpan.Click '点击触发跳转 Else MsgBox "未找到目标跳转链接,请检查页面结构是否变动" End If '如果要选择顶部的Process链接,把上面的第2步代码替换为下面的代码即可: 'Set targetSpan = HTMLDoc.querySelector("span.topNavoff[onclick*='setTask(''pmMain'')']") 'If Not targetSpan Is Nothing Then ' targetSpan.Click 'Else ' MsgBox "未找到顶部目标跳转链接" 'End If End Sub
关键逻辑说明
- 登录提交后新增了双重等待逻辑,同时判断页面就绪状态和IE是否处于忙碌状态,避免页面未加载完成就查找元素的问题
- 优先使用带唯一id的底部链接定位,兼容性和稳定性最高,受页面其他元素调整的影响最小
- 提供了顶部链接的可选定位方案,使用CSS选择器匹配类名和点击事件特征,无需额外遍历元素集合
内容的提问来源于stack exchange,提问作者MattyRB
相关产品推荐
相关产品推荐

