2017-07-07 1 views
0

J'essaie de créer un planificateur de tâches pour obtenir un lien d'intégration d'un site Web toutes les heures et j'utilise powershell pour récupérer l'information de web.invoke-webrequest, New-Object -ComObject "InternetExplorer.Application et New-Object net.webclient

$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 

cela peut me aider à obtenir l'information. Mais cela doit être dans l'interface utilisateur. est-ce que pas si elle est exécutée en tant que back-end (planificateur de tâches)

$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 didnot montrent à reconstituer si info je cherche la chaîne est dans outerHTML Le nom de classe appelé Formlink seulement se trouve dans 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") 

va de même pour net.webclient

Pourquoi est-ce donc ??

l'info i besoin est outerHTML avec 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> 

==================== =========== Mise à jour Boyd @ Jason: J'ai essayé avec chaque en-tête de demande, il n'a toujours pas la sortie

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 

Et il y a une chose, lors de l'exécution

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

IE n'a pas ouvert le lien complet, il directement à la page d'accueil. https://servicenow.xxx.com/navpage.do

Notez qu'il a iframe (même URL toutes les pages) dans le code source.

Que puis-je essayer d'autre?

Répondre

0

La seule différence entre une demande envoyée par IE et une demande envoyée avec Invoke-WebRequest serait les en-têtes de demande. Ma conjecture est que le site en question répond différemment en fonction des en-têtes. Le plus probable, je pense, est l'en-tête user-agent. Je commencerais par examiner ce qui se passe si vous modifiez l'en-tête user-agent envoyé par PowerShell à la même valeur que l'en-tête user-agent envoyé par IE. Cette commande ressemblerait à quelque chose comme ceci:

$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 } 

Si cela ne fonctionne pas, je voudrais vérifier chacun des autres en-têtes envoyés par IE. Votre URL, servicenow.dhl.com, ne résout pas pour moi donc je ne peux pas le tester moi-même.

+0

Salut, Merci pour notre suggestion. J'ai essayé chaque en-tête de demande, C'est toujours la même sortie. – Jimmy