2010-12-13 37 views
0

J'ai ce script pour lancer IE, accédez à une page et recherche de texte:de script Powershell pour faire Web UI Automation ne fonctionne pas

$ie = new-object -com "InternetExplorer.Application" 
$ie.Visible = $true 
$ie.Navigate("http://www.google.com") 
$doc = $ie.Document 
if ($doc -eq $null) 
{ 
    Write-Host "The document is null." 
    return 
} 
$tb1 = $doc.getElementsByName("q") # a text box 
$tb1.value = "search text"; 
$btn = $doc.getElementsByName("btnG") 
$btn.click() 

Je l'enregistrer comme un fichier ps1 et l'exécuter à partir de la commande line ... mais l'objet document renvoyé par $ie.Document est toujours null.

Qu'est-ce que je fais mal?

Également, lorsque j'exécute le script ligne par ligne en mode interprète, le document est renvoyé, mais la ligne suivante $tb = $doc.getElementsByName("q") erreurs avec ceci: La propriété 'Valeur' ​​est introuvable sur cet objet; assurez-vous qu'il existe et est réglable.

Comment définir la valeur de la zone de texte, alors?

Répondre

3

Vous devez vérifier si IE a fini de charger la page avant l'affectation $ doc. Par exemple,

while ($ie.busy) { 
#Sleep a bit 
} 

J'ai essayé le même code pour entrer le texte de recherche et le clic de bouton, mais cela n'a pas fonctionné. Alors, a fini par modiying votre code à

$ie = new-object -com "InternetExplorer.Application" 
$ie.Visible = $true 
$ie.Navigate("http://www.google.com") 
While ($ie.Busy) { 
Sleep 2 
} 
$doc = $ie.Document 

$btns = $doc.getElementsByTagName("input") 
$SearchText = $btns | ? { $_.Name -eq "q" } 
$SearchText.value = "search text" 
$SearchButton = $btns | ? { $_.Name -eq "btnG" } 
$SearchButton.click() 
+0

Ravikanth, merci - votre solution a fonctionné. Mais pourquoi cela n'a-t-il pas fonctionné quand j'ai utilisé $ doc.getElementsByName ("q")? Y at-il quelque chose de mal à utiliser cela? –

+0

Je ne suis pas sûr. Il a plusieurs propriétés. Peut-être besoin de le regarder une fois de plus. – ravikanth

1

Je crois qu'il ya deux questions que je peux voir. Premièrement, la suggestion de Ravikahth d'ajouter la possibilité d'attendre le chargement de la page est importante. Si vous n'attendez pas le chargement de la page (c'est-à-dire $ ie.busy -eq $ false), vous n'obtiendrez pas le document complet. Deuxièmement, pour une raison quelconque, Google a décidé d'ajouter plusieurs champs de saisie avec le nom de «q». Vous pouvez ajouter une deuxième condition à la requête de Ravikanth comme indiqué ci-dessous:

$SearchText = $btns | ? { $_.Name -eq "q" -and $_.Type -eq "text"}