TUTOS.EU

Automatiser la saisie d'éléments dans une page web en Powershell

Remplir des champs d'un formulaire web et le poster en Powershell

Voici un premier jet de script en powershell ici fait pour une webinterface Citrix.
Le script se connecte sur cette url, se log et check la présence de l'id de la balise html d'une appli. Si l'authentification échoue, le script test de cliquer sur le bouton qui permet de se déconnecter et rente une authentification

$oIE=new-object -com internetexplorer.application
$oIE.visible=$true
$oIE.navigate2("http://monsiteweb.local")
while ($oIE.busy) {sleep -milliseconds 50}
Write-host "On entre le login/mdp"

#$ErrorActionPreference = "Continue"
$ErrorActionPreference = "silentlycontinue" #En cas d'erreur, on ne dit rien et on continu
$DebugPreference = "Continue" #En cas d'erreur, Powershell montrera le message et continuera
$Error.Clear() #Purge des erreurs

#$oTBody=@($oIE.document.getElementsByTagName("TBODY"))[0] ;
$oIE.document.getElementByID("user").value="login";
$oIE.document.getElementByID("password").value="mot de passe";

if($Error.Count -ne 0) #Si on a une erreur
{
	Write-host "Erreur pour entrer le login/mot de passe. On est peut être déjà connecté. On tente une déconnexion"
	$oIE.Stop()

	$($oIE.document.getElementByID("logoutAreaDisconnectLink")).click();
	while ($oIE.busy) {sleep -milliseconds 50}
	$oIE.navigate2("http://monsiteweb.local")
	while ($oIE.busy) {sleep -milliseconds 50}
	$oIE.document.getElementByID("user").value="login";
	$oIE.document.getElementByID("password").value="mot de passe";
}

#$oIE.Document.getElementById("CitrixForm").Submit();
$($oIE.document.Forms)[0].Submit(); #On fait un submit du premier formulaire dispo dans la page
while ($oIE.busy) {sleep -milliseconds 50}

$Error.Clear() #Purge des erreurs
$oIE.document.getElementByID("MonAppli")
Write-host "Erreur ? : $($Error.Count)"

$oIE.Stop()
$oIE.Quit()
Lien vers le fichier : cliquez ici Copier le code

Notez qu'en Powershell il existe la commande Invoke-WebRequest.
Vous pouvez inspecter le contenu statique d'une page web avec.
Si il y a du contenu affiché en javascript avec ajax par exemple, vous ne le verrez pas (pas à ma connaissance).
Vous n'aurez pas d'interactif, vous ne pourrez pas cliquer sur un lien par exemple.
Des sites comme le bon coin vous bloqueront avec des messages d'erreur du style Please enable JS and disable any ad blocker.

Exemples de commandes :

(Invoke-WebRequest -Uri "https://www.google.fr/").rawcontent
(Invoke-WebRequest -Uri "https://www.google.fr/").Links
Lien vers le fichier : cliquez ici Copier le code

Il existe à priori d'autres solutions plus complètes suivant ce que l'on veut faire.

J'ai vu par exemple Scrapy  qui est un framework open-source développé en Python pour la création de robots d'indexation.

Il y a aussi mechanize qui est écrit en ruby. Il est fait pour automatiser les interactions avec les sites webs.


2