我有一些代码可以通过VBA中的Internet Explorer自动化从多个网站检索数据。我的代码在IE8中没有问题,但是在IE11中,在调用Internet Explorer对象的Navigate方法之后,Document和LocationURL没有更新;他们仍然参考以前显示的网站。这里有一些代码可以重现问题:
Sub Test()
Debug.Print "start"
Dim ie
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate "http://en.wikipedia.org/wiki/Visual_Basic"
wait ie
Debug.Print "Current URL: " & ie.LocationURL
ie.Navigate "http://en.wikipedia.org/wiki/Microsoft_Office"
wait ie
Debug.Print "Current URL: " & ie.LocationURL
Set ie = Nothing
End Sub
Sub Wait(ie As Variant)
Do While ie.Busy
Application.wait DateAdd("s", 1, Now)
Loop
End Sub
当在具有IE8的机器上运行上述Test子时,它会打印两个不同的URL,这是预期的行为。但是,当我在使用IE11的计算机上运行相同的代码时,它会打印第一个URL两次。知道什么可能是错的吗?
更新:我无法找到解决方案,因此我选择了为每个网址打开新IE窗口的解决方法。
答案 0 :(得分:2)
我不熟悉您正在使用的VBA IE自动化,但听起来您遇到的问题与IE11上的Selenium WebDriver相同。
您可能需要遵循Selenium Wiki中提供的相同步骤。
仅对于IE 11,您需要在目标上设置注册表项 计算机使驱动程序可以保持与实例的连接 它创建的Internet Explorer。对于32位Windows安装, 您必须在注册表编辑器中检查密钥 HKEY_LOCAL_MACHINE \ SOFTWARE \微软\互联网 资源管理器\ MAIN \ FeatureControl \ FEATURE_BFCACHE。对于64位Windows 装置,关键是 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\互联网 资源管理器\ MAIN \ FeatureControl \ FEATURE_BFCACHE。请注意 FEATURE_BFCACHE子键可能存在也可能不存在,应该是 如果它不存在则创建。重要提示:在此密钥内,创建一个 DWORD值名为iexplore.exe,值为0.
http://code.google.com/p/selenium/wiki/InternetExplorerDriver
希望能解决您的问题!
答案 1 :(得分:0)
Public explorer As Object
....
Set explorer = CreateObject("InternetExplorer.Application")
....
If InStr(explorer.LocationURL, "CAPTCHA") = 0 Then
...
End If