Powershell 使用Invoke WebRequest时,如果使用UseBasicParsing,为什么只能连接到某些URL?

Powershell 使用Invoke WebRequest时,如果使用UseBasicParsing,为什么只能连接到某些URL?,powershell,invoke-webrequest,Powershell,Invoke Webrequest,我正在遍历URL的CSV文件,并使用Invoke WebRequest获取符合指定条件的链接的innerHTML和href值,但是这仅适用于某些URL,而不适用于其他URL,除非我添加参数-UseBasicParsing,它不提供我需要的属性访问和筛选功能 一个共同点是,那些不起作用的都使用www子域,但有几个子域在没有这个子域的情况下仍然可以访问,但仍然不起作用。我不确定这是否应该是一个问题,因为其他www URL也起作用 如上所述,我尝试添加UseBasicPassing,它允许连接,但这限

我正在遍历URL的CSV文件,并使用Invoke WebRequest获取符合指定条件的链接的innerHTML和href值,但是这仅适用于某些URL,而不适用于其他URL,除非我添加参数-UseBasicParsing,它不提供我需要的属性访问和筛选功能

一个共同点是,那些不起作用的都使用www子域,但有几个子域在没有这个子域的情况下仍然可以访问,但仍然不起作用。我不确定这是否应该是一个问题,因为其他www URL也起作用

如上所述,我尝试添加UseBasicPassing,它允许连接,但这限制了我可以访问的数据。我还查看了URL的http头,试图了解它们之间的区别,但不确定问题出在哪里

此功能正常运行,并返回页面上每个链接的innerHTML文本和href

$currentRequest = Invoke-WebRequest -Uri https://moz.com/learn/seo/what- 
is-seo
$currentRequest | Get-Member
$currentRequest = $currentRequest.Links |
Select innerHTML, href |
WHERE innerHTML -like *SEO*
$currentRequest
使用与以下URL完全相同的代码,控制台将冻结,直到脚本退出

当我使用工作URL运行脚本时,我会为每个链接获得一对值,如下所示

innerHTML : Recommended SEO Companies
href      : https://moz.com/community/recommended
对于上面提到的非工作URL,命令行只停留在闪烁的光标上

这只是一个示例,我还需要查询其他数据,以便了解如何始终如一地运行Invoke WebRequest而不会出现问题

非常感谢


迈克

与其说是一个答案,不如说是一个长篇大论

在PowerShell 5.1中,Invoke WebRequest使用Internet Explorer引擎将html解析为DOM,这也会导致执行页面上的任何脚本,因此脚本中可能出现错误,或者无头Internet Explorer实例出于任何原因不喜欢页面内容

其他地方也有类似问题的报道——例如

添加
-UseBasicParsing
开关可以绕过Internet Explorer,使用更简单的内部HTML解析器-如果需要提取其他信息,可以使用HTML解析器库(如or)来解析和查询
$currentRequest.Content
属性

请注意,PowerShell Core 6.0及更高版本已将
-UseBasicParsing
切换为默认行为,实际上无法将其关闭,因此,如果您现在想编写经得起未来考验的脚本,最好是找到一种使用
-UseBasicParsing
解决问题的方法,这样,如果您想升级到PowerShell Core,就不必重写它。(见附件)

请参阅以了解相关问题。

首先,在“有效”的代码中,即您的第一个示例代码中,您缺少了-UseBasicParsing。现在,为什么会这样。此处的文档说明了原因:

引用:“默认情况下,在解析网页以填充ParsedHtml属性时,可以运行网页中的脚本代码。请使用-UseBasicParsing开关取消此操作。”

如果查看PowerShell v6,默认解析已切换为“-UseBasicParsing”(请参见此处:)


这不太好,b/c您提到的原因,不幸的是没有缓解(请参阅PowerShell开发人员的评论:)

您等待闪烁的光标多长时间了?在这段时间内,您的CPU使用情况如何?我怀疑问题完全在于页面的内容和IE的解析能力。我已经离开了大约15分钟。将检查cpu使用情况,但这是一个非常基本的页面。