14 html powershell
我可以使用PowerShell来解析HTML页面
PS > $foo = Invoke-WebRequest http://example.com
PS > $foo.Links.Count
1
Run Code Online (Sandbox Code Playgroud)
但是如果我下载页面
PS > Invoke-WebRequest -OutFile example.htm http://example.com
Run Code Online (Sandbox Code Playgroud)
然后尝试解析下载的页面,它会产生意想不到的结果
PS > $foo = Invoke-WebRequest file://$pwd/example.htm
PS > $foo.Links.Count
0
Run Code Online (Sandbox Code Playgroud)
如何解析本地下载的页面?
Pet*_*erK 24
似乎Invoke-WebRequest加载file协议URI就好了,但即使在PowerShell 4.0(官方支持它)中也无法解析它们.
不需要设置网站的替代方案是将HTML直接加载和解析为MSHTML.
$html = New-Object -ComObject "HTMLFile";
$source = Get-Content -Path "file.html" -Raw;
$html.IHTMLDocument2_write($source);
$html.links.length;
Run Code Online (Sandbox Code Playgroud)
请注意,当我测试这个时,单个
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Run Code Online (Sandbox Code Playgroud)
标题阻止我的HTML解析,我不明白为什么 - 文档有类似的XHTML样式标题,MSHTML没有问题.
小智 4
您可以将该文件与 Web 服务器一起使用 来绕过 Invoke-WebRequest 的愚蠢限制
PS > $foo = Invoke-WebRequest http://localhost:8080/example.htm
PS > $foo.Links.Count
1
Run Code Online (Sandbox Code Playgroud)
请注意,即使没有连接,这也可以工作,例如
PS > Invoke-WebRequest http://example.com Invoke-WebRequest:无法解析远程名称:“example.com”