我正在尝试创建任务计划程序,以便每小时从网站获取一个嵌入式链接,我正在使用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的Classname只能在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&sysparm_record_target=incident&sysparm_record_row=1&sy
sparm_record_rows=1&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(所有页面都是相同的网址)。
我还能尝试什么?
答案 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并不适合我,因此我无法自行测试。