【问题标题】:Export HTML to text file with different results将 HTML 导出到具有不同结果的文本文件
【发布时间】:2019-04-07 13:13:04
【问题描述】:

我有两个代码..应该将 html 文件导出到文本文件

Sub Demo1()
Dim http        As New XMLHTTP60
Dim html        As New HTMLDocument

With http
    .Open "GET", "https://www.google.com.eg/", False
    .send
    html.body.innerHTML = .responseText

    WriteTxtFile html.body.innerHTML
End With
End Sub

Sub WriteTxtFile(ByVal aString As String, Optional ByVal filePath As String = "C:\Users\Future\Desktop\Output.txt")
Dim fso         As Object
Dim fileout     As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Set fileout = fso.CreateTextFile(filePath, True, True)
fileout.write aString
fileout.Close
End Sub

Sub Demo2()
Dim ie          As Object
Dim f           As Integer

Set ie = CreateObject("InternetExplorer.Application")

With ie
    .Visible = True
    .navigate ("https://www.google.com.eg/")

    Do: DoEvents: Loop Until .readyState = 4

    f = FreeFile()
    Open ThisWorkbook.Path & "\Sample.txt" For Output As #f
    Print #f, .document.body.innerHTML
    Close #f

    .Quit
End With
End Sub

Demo1 和 Demo2 都是代码 .. 它们导致“Sample.txt”和“Output.txt” 但是我发现那些 html 文档是不同的结果 你能帮我澄清一下什么是正确的......以及为什么它们不同?

感谢您的帮助

【问题讨论】:

  • 它们有何不同?
  • 脚本在浏览器中加载后可以更改/添加到页面内容。这不会发生在 xmlhttp

标签: excel vba xmlhttprequest


【解决方案1】:

Xmlhttp 不提供网页的所有呈现内容。特别是通过 JavaScript 执行呈现的任何内容。不执行任何脚本。

另一方面,Internet Explorer 将呈现页面(前提是浏览器版本和 JavaScript 语法受支持。例如,您将遇到 ec6 - 最新 Ecmascript 的问题,因为旧版浏览器不支持此功能。这是我相信适用于 Windows 10 的 Edge。您可以查看兼容性表以了解完全支持和不支持的内容)。

如果您熟悉浏览器的开发工具,您可以探索网页的不同部分是如何呈现的。您可以学习调试脚本并查看对 DOM 和页面样式进行了哪些更改。例如,页面通常会发出 XHR 请求以更新页面上的内容。想玩的话看here.

因此,在此基础上,我怀疑第一个 html 文档的内容和第二个文档的整体 DOM 结构可能会更少。

要测试由于写入文本文件方法导致的差异,您需要将 Apple 与 Apple 进行比较,即在写入之前使用相同的抓取访问方法和语法来检索页面内容。

如果您需要更深入的解释,请提供差异。


探索页面更新:

  1. Firefox Network Tab
  2. Internet Explorer Network Inspector
  3. Chrome Network Tab

【讨论】:

  • 非常感谢您的详细解释。事实上,我正在寻找一种方法来获得与 >> 导航到 url 然后在 chrome 中按 F12 然后右键单击第一个 html 并复制元素时相同的内容.. 这如何通过代码完成?
  • 你可以选择带有.document.getElementsByTagName("html")(0)的html标签
  • 我认为最后的评论是我正在寻找的解决方案。非常感谢您的大力帮助
猜你喜欢
  • 2019-02-26
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2018-03-22
相关资源
最近更新 更多