首先,我对尝试通过 Excel VBA 自动化 IE 还很陌生。
话虽这么说,我正在努力自动登录公司特定的网页(仅我们的员工可以访问)。目标是自动登录(员工编号、密码并单击“登录”)。我发现 Firefox 在识别字段方面特别有帮助,所以这就是我在屏幕截图中使用的。
我在网上找到了一些代码来导航到网页并在搜索框中输入内容。我已将其修改如下(包含的链接不是真实的)。
终于说到问题了。例如,如果我输入像 www.google.com 这样的网页,一切都会正常执行。但是,当我更改为我的公司链接时,代码在 Do While 处冻结,并显示错误。所以我的问题是为什么它适用于一般网页而不适用于我公司的特定网页?如果我注释掉该行,调试时仍然会收到断开连接的错误。假设这个问题很容易解决,我是否也正确识别了该字段?
希望我已经为您提供了足够的信息。如果没有,请告诉我还需要什么。在此先感谢您的帮助!
Error
'start a new subroutine called SearchBot
Sub SearchBot()
'dimension (declare or set aside memory for) our variables
Dim objIE As InternetExplorer 'special object variable representing the IE browser
'initiating a new instance of Internet Explorer and asigning it to objIE
Set objIE = New InternetExplorer
'make IE browser visible (False would allow IE to run in the background)
objIE.Visible = True
'navigate IE to this web page (a pretty neat search engine really)
objIE.navigate "http://sampletext.asp"
'wait here a few seconds while the browser is busy
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
'enter value in the employee number box
objIE.document.getElementByName("txtEmployeeNum").Value = "123456"
员工编号
该方法的正确名称是getElementsByName
.
您还希望操作此方法返回的集合元素,而不是整个集合。使用(0)
索引将允许处理集合的第一个元素。
Change:
objIE.document.getElementByName("txtEmployeeNum").Value = "123456"
to:
objIE.document.getElementsByName("txtEmployeeNum")(0).Value = "123456"
有了这样更正的代码,您应该在 VB 编辑器中使用 F8 单步执行代码。例如,将鼠标悬停在上方,看看是否objIE.Busy
曾经得到过FALSE
尤其是如果objIE.readyState
曾经达到 4 - 如果只有 3,请尝试objIE.readyState < 3
反而。
EDIT:
尝试更换:
Dim objIE As InternetExplorer
Set objIE = New InternetExplorer
with:
Dim objIE As Object
Set objIE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
您可能还需要改变objIE.Navigate
with objIE.Navigate2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)