【发布时间】:2019-07-24 05:26:25
【问题描述】:
我创建了一个宏来解析不同电影的名称,该电影遍历来自一个 torrent 网站的多个页面。我将InternetExplorer 与 Html.body.innerHTML 解析器(通常与 xmlhttp 请求一起使用)结合使用以加快执行速度。虽然这个网站的内容不是动态的,但我使用 IE 来查看它在结合 Html.body.innerHTML 进行抓取时的行为。
当我使用 IE 运行我的脚本时,它会按预期解析内容并完成工作。我面临的唯一问题是每个分页中都会突然出现一个空白屏幕,如下图所示。
我怎样才能摆脱这个黑屏问题?
我的脚本(当我将Html.body.innerHTML 与 Chrome 驱动程序结合使用时没有问题):
Sub FetchContent()
Const link = "https://yts.am/browse-movies/0/all/action/0/latest?page="
Dim driver As New ChromeDriver, Html As New HTMLDocument, genre$
Dim post As HTMLDivElement, I&, R&
For I = 1 To 3
With driver
.AddArgument "--headless"
.get link & I
Html.body.innerHTML = .ExecuteScript("return document.documentElement.outerHTML")
End With
For Each post In Html.getElementsByClassName("browse-movie-bottom")
R = R + 1: Sheets(1).Cells(R, 1) = post.getElementsByClassName("browse-movie-title")(0).innerText
Next post
Next I
driver.Quit
End Sub
当我尝试将Html.body.innerHTML 与 IE 结合使用时,我希望获得相同的行为,但它会产生空白屏幕以及所需的结果:
Sub FetchContent()
Const link = "https://yts.am/browse-movies/0/all/action/0/latest?page="
Dim IE As New InternetExplorer, Html As New HTMLDocument, genre$
Dim post As HTMLDivElement, I&, R&
For I = 1 To 4
With IE
.Visible = False
.navigate link & I
While .Busy Or .readyState < 4: DoEvents: Wend
Html.body.innerHTML = .document.DocumentElement.outerHTML
End With
For Each post In Html.getElementsByClassName("browse-movie-bottom")
R = R + 1: Sheets(1).Cells(R, 1) = post.getElementsByClassName("browse-movie-title")(0).innerText
Next post
Next I
IE.Quit
End Sub
IE 与Html.body.innerHTML 组合时每个分页中出现的空白屏幕:
【问题讨论】:
-
使用
html.Write ie.Document.body.outerHtml,后跟html.Close。用Set ie = CreateObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")实例化IE,用Set html = CreateObject("new:{25336920-03F9-11CF-8FD0-00AA00686F13}")实例化文档。 -
很高兴从您@Florent B 那里得到任何解决方案。问题是由于我的知识浅薄,我几乎无法在我的脚本中实现您建议的部分。但是,如果您介意将此作为答案,我将不胜感激。谢谢。
标签: excel vba web-scraping internet-explorer-11