如何使用 PowerShell 或 C# 将网页保存到 HTML 文件中?

jya*_*yao 4 html powershell google-chrome web

我有以下链接,当我通过 Chrome 打开链接,然后右键单击页面,然后选择“另存为”将页面保存到 HTML 文件 (c:\temp\cu2.html)

在此处输入图片说明

保存后,我可以用 HTML 编辑器(比如 VS2015)打开这个 cu2.html 文件,我可以看到文件内部,有如下所示的标签

在此处输入图片说明

但是,如果我使用 IE11(而不是 Chrome)打开链接,然后将同一页面另存为 HTML 文件,则根本找不到此标签。实际上,IE11 保存的 html 文件与我可以使用下面的 PowerShell 脚本提取的内容相同。

#Requires -version 4.0
$url = 'https://support.microsoft.com/en-us/help/4052574/cumulative-update-2-for-sql-server-2017';

$wr = Invoke-WebRequest $url;
$wr.RawContent.contains('<table') # returns false

$wr.RawContent | out-file -FilePath c:\temp\cu2_ps.html -Force; #same as the file saved from the webpage to html file in IE
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

为什么 Chrome 中保存的网页(作为 html 文件)与 IE 中的不同?

如何使用 PowerShell(或 C#)将此类网页保存为 HTML 文件(与 Chrome 中保存的文件相同)?

在此先感谢您的帮助。

Rez*_*aei 6

这些页面使用 AngularJS 和 jQuery。这意味着在文档准备好后将加载一些内容。因此,当您使用 发送请求时Invoke-WebRequest,您只会收到页面的原始内容。其他内容将在一段时间后加载。

为了解决这个问题,您可以自动化 IE 以获得预期的结果。等待页面准备就绪并等待运行AngularJs逻辑并下载所需内容,然后获取文档元素的内容就足够了:

$ie = new-object -ComObject "InternetExplorer.Application"
$url = "https://support.microsoft.com/en-us/help/4052574/cumulative-update-2-for-sql-server-2017"
$ie.silent = $true
$ie.navigate($url)
while($ie.Busy) { Start-Sleep -Milliseconds 100 }
Start-Sleep 10
$ie.Document.documentElement.innerHTML > "C:\Tempfiles\output.html"
$ie.Stop()
$ie.Quit()
Run Code Online (Sandbox Code Playgroud)