首先,我很想尝试通过Excel VBA自动化IE。 话虽这么说,我正在努力自动登录公司特定的网页(只有我们的员工才能访问)。目标是自动登录(员工编号,密码和单击登录)。我发现Firefox在识别字段方面特别有用,这就是我在屏幕截图中使用的内容。
我在网上找到了一些代码,可以导航到网页并在搜索框中输入内容。我修改了如下(包含的链接不是真实的)。
最后到了这个问题。例如,如果我进入像www.google.com这样的网页,那么一切都会正常运行。但是,当我更改为我的公司链接时,代码在Do While冻结,我收到错误。所以我的问题是为什么它适用于一般网页但不适用于我公司特定的网页?如果我注释掉那一行,我在调试时仍然会收到断开连接的错误。假设这个问题很容易解决,我是否也正确识别了该字段?
希望我已经为您提供了足够的信息。如果没有,请告诉我还需要什么。在此先感谢您的帮助!
'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"
答案 0 :(得分:1)
方法的正确名称为getElementsByName
。
您还希望对此方法返回的集合元素进行操作,而不是整个集合。使用(0)
索引将允许处理集合的第一个元素。
变化:
objIE.document.getElementByName("txtEmployeeNum").Value = "123456"
为:
objIE.document.getElementsByName("txtEmployeeNum")(0).Value = "123456"
使用这样的更正代码,您应该在VB编辑器中使用F8单步执行代码。例如,通过悬停,查看objIE.Busy
是否获得FALSE
,尤其是objIE.readyState
是否达到4 - 如果只有3,请尝试objIE.readyState < 3
。
编辑:
尝试更换:
Dim objIE As InternetExplorer
Set objIE = New InternetExplorer
使用:
Dim objIE As Object
Set objIE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
您可能还需要使用objIE.Navigate
objIE.Navigate2