invoke-webrequest,New-Object -ComObject" InternetExplorer.Application和New-Object net.webclient

时间:2017-07-07 03:39:23

标签: html powershell internet-explorer webclient

我正在尝试创建任务计划程序,以便每小时从网站获取一个嵌入式链接,我正在使用PowerShell从Web检索信息。

 $ie = New-Object -ComObject "InternetExplorer.Application"
$ie.navigate("https://servicenow.xxx.com/textsearch.do?sysparm_search=b096b923-92c5-47ad-9a7c-1657847970a6"
while($ie.Busy) {start-sleep -Milliseconds 1000}
$doc = $ie.document.body.getElementsByClassName("formlink") | select href

这可以帮助我获取信息。但这必须在UI中。如果作为后端(任务调度程序)运行将失败

$test = Invoke-WebRequest -Uri https://servicenow.xxx.com/textsearch.do?sysparm_search=b096b923-92c5-47ad-9a7c-1657847970a6
$test.ParsedHtml.body 

#or

$test.ParsedHtml.all 

Invoke-webrequest如果我正在寻找信息,则不显示。字符串在outerHTML中。名为Formlink的Cla​​ssname只能在via" New-Object -ComObject" InternetExplorer.Application" 。

$webclient = New-Object net.webclient
$webclient.DownloadString("https://servicenow.xxx.com/textsearch.do?sysparm_search=b096b923-92c5-47ad-9a7c-1657847970a6")

同样适用于net.webclient

为什么会这样?

我需要的信息是outerHTML  使用New-Object -ComObject" InternetExplorer.Application"

<td title="" class="vt" style="direction: ltr;" colspan="1" 
                           data-original-title=""><a class="linked formlink" href="u_event.do?sys_id=7435d8a0db3b36c020fffd051d961919&amp;sysparm_record_target=incident&amp;sysparm_record_row=1&amp;sy
                           sparm_record_rows=1&amp;sysparm_record_list=123TEXTQUERY321%253Db096b923-92c5-47ad-9a7c-1657847970a6">INC18701854</a></td>

=============================== 更新@Jason Boyd :尝试使用每个请求标头,它仍然没有输出

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)



X-P2P-PeerDist: Version=1.1



Accept-Encoding: gzip, deflate, peerdist



Connection: Keep-Alive



Accept: */*



Host: servicenow.xxx.com



X-P2P-PeerDistEx: MinContentInformation=1.0, MaxContentInformation=2.0



Cache-Control: no-cache



Accept-Language: en-US, en; q=0.8, zh-Hans-SG; q=0.5, zh-Hans; q=0.3

运行时有一件事

Invoke-WebRequest -Uri https://servicenow.xxx.com/textsearch.do?sysparm_search=b096b923-92c5-47ad-9a7c-1657847970a6 
IE没有打开完整的链接,它直接到主页。 https://servicenow.xxx.com/navpage.do

请注意,源代码中有iframe(所有页面都是相同的网址)。

我还能尝试什么?

1 个答案:

答案 0 :(得分:0)

IE发送的请求与Invoke-WebRequest发送的请求之间的唯一区别是请求标头。我的猜测是,有问题的网站会根据标题做出不同的反应。我认为最可能的嫌疑是user-agent标题。我将首先调查如果将PowerShell发送的user-agent标头更改为与IE发送的user-agent标头相同的值,会发生什么。该命令看起来像这样:

$YourIEUserAgentHeader = "Put IE's user-agent header here"
Invoke-WebRequest `
    -Uri https://servicenow.dhl.com/textsearch.do?sysparm_search=b096b923-92c5-47ad-9a7c-1657847970a6 `
    -Headers @{ 'user-agent' = $YourIEUserAgentHeader }

如果这不起作用,我会检查IE发送的每个其他标头。您的网址servicenow.dhl.com并不适合我,因此我无法自行测试。