我刚刚开始使用VBA,我正在遵循一个简单的教程来使用VBA在IE中进行Google搜索。
Sub FillInternetForm()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "https://www.google.com"
IE.Visible = True
While IE.busy
DoEvents 'wait for page to finish loading
Wend
IE.Document.All("q").Value = ThisWorkbook.Sheets("sheet1").Range("a1")
IE.Document.All("btnK").Click
End Sub我多次运行这段代码(通过按f5),似乎IE.Document.All("btnK").Click只是偶尔才能工作。Macros pop up有时会出现,有时不会。我只是想知道这可能是什么原因,或者是否有任何方法可以防止这种情况发生。
我正在使用Excel 2013
谢谢
发布于 2018-06-19 05:59:17
您可以完全避免使用搜索按钮,直接将搜索词连接到URL中。例如:
Option Explicit
Sub FillInternetForm()
Dim IE As Object, searchTerm As String
searchTerm = ThisWorkbook.Worksheets("Sheet1").Range("A1")
Set IE = CreateObject("InternetExplorer.Application")
With IE
.navigate "https://www.google.co.uk/search?safe=strict&source=hp&ei=XiooW8rAKMeZsgGji57gBw&q=" & searchTerm & "&oq=" & searchTerm & "&gs_l=psy-ab.3..0l2j0i131k1j0l2j0i131k1j0j0i131k1l3.1481.2118.0.2518.7.6.0.0.0.0.124.555.0j5.6.0..3..0...1.1.64.psy-ab..1.6.657.6..35i39k1.103.n22OrWdTQrs"
.Visible = True
While .Busy Or .readyState < 4: DoEvents: Wend
Stop '<= Delete this line
.Quit
End With
End Sub如果您执行示例搜索,则可以捕获URL并将变量名中的编辑内容转换为字符串,如我上面所示。
正如@RyszardJędraszyk解释的那样(非常感谢),你可能有一个动态加载的网页,其中的内容在你试图抓住一个元素的时候是不可用的。在这种情况下,你可以有一个循环,它试图设置一个你知道应该存在的元素,并在is nothing时循环(带超时)。
Ryszard进一步指出,你错过了完全加载的ReadyState = 4 (例如,这确实意味着动态页面实际上是完全加载的,或者延迟加载页面的所有项目都是可见的(您可能需要滚动才能实现这一点。我上面的回答向你展示了如何使用ReadyState。
我不确定这个弹出窗口的原因,所以我选择了最简单的方法来获取感兴趣的页面,试图减少这种情况发生的风险。我担心这不是我曾经发生过的事情,也不会重现。
https://stackoverflow.com/questions/50917913
复制相似问题