是否有一种万无一失的方式让脚本等到Internet Explorer完全加载?
两者oIE.Busy和/或oIE.ReadyState都没有按照他们应该的方式工作:
Set oIE = CreateObject("InternetExplorer.application")
oIE.Visible = True
oIE.navigate ("http://technopedia.com")
Do While oIE.Busy Or oIE.ReadyState <> 4: WScript.Sleep 100: Loop
' <<<<< OR >>>>>>
Do While oIE.ReadyState <> 4: WScript.Sleep 100: Loop
Run Code Online (Sandbox Code Playgroud)
还有其他建议吗?
要暂停代码直到网页完全加载,我几乎一直都在使用下面的方法取得了巨大的成功.
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
Run Code Online (Sandbox Code Playgroud)
但偶尔,我会在方法确定页面已完全加载后看到文本内容加载,因此不会提取内容.
但是,如果我通过F8单步执行代码,则每次都会提取内容.这是我可以反复按F8键的速度.
那么如何在代码继续提取数据之前检查以确保页面及其所有内容是否已完全加载?
在这两种情况下,IE都是无形的运行.但是,我已经尝试使用IE浏览器,并且在我正在使用的页面上的这个特定位置实际上有内容.
这是在Excel 2016中使用VBA脚本完成的.具体内容请求如下:
'get item name from page and write it to the first cell on the first empty row available
Set itemName = objIE.document.querySelector(".the-item-name")
Worksheets("Results").Range("A1048576").End(xlUp).Offset(1, 0).Value = itemName.innerText
Run Code Online (Sandbox Code Playgroud)
我已经阅读了Excel VBA:等待在Internet Explorer中执行JavaScript,因为我认为在加载文档后可能会添加值,以防止任何人抓取数据.但是,我似乎无法识别可能正在执行此操作的任何脚本.并不意味着它不存在.我还是看不到它.
具有此问题的页面的具体示例是URL
https://www.homedepot.ca/en/home/p.dry-cloth-refills-32---count.1000660019.html
最初product-total-pricediv元素包含破折号( - ),在加载价格之前,这就是请求将返回的内容:- / each而不是$11.29 / each.
我有一个解决方法,但它不像我希望的那样高效或简洁.我测试返回的字符串是否存在破折号.如果它在那里,循环并再次检查它,否则捕获它并将其插入工作表.
setPriceUM:
Set hdPriceUM = objIE.document.querySelector(".product-total-price").innerTe????xt
hdPriceUMString = hdPriceUM.innerText
stringTest = InStr(hdPriceUMString, "-")
If stringTest = …Run Code Online (Sandbox Code Playgroud) 我有一个包含 1000 个关键字的列表A1:A1000。我想在每个关键字的相应单元格中获取第一页的 Google 搜索结果片段。例如:A1单元格的搜索结果片段应该在B1......*1等等。任何帮助深表感谢。