Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1489 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  PowerShell : Compléter champs web

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PowerShell : Compléter champs web

n°2327093
jpass2
Posté le 03-01-2019 à 16:27:53  profilanswer
 

Bonjour,
 
En PowerShell, je souhaite remplir des champs html automatiquement.
Le site html semble simple :
 

Code :
  1. <input type="text" name="monlogin" size="15" maxlength="15"/>
  2. <input type="password" name="elcode" size="15" maxlength="15"/>
  3. <input type="submit" name="go" value="log on" class="x1">
  4. <input type="reset" value="  refaire  " class="x2">


 
 
Je me suis inspiré de ce code qui fonctionne (sic) avec Office mail 365 en remplaçant "getElementById" par "getElementsByTagName" car dans le html ci-dessus il y a un nom pas d'ID de champs, seulement un name. :
 
 
 

Code :
  1. # Remplacer les valeurs suivantes par vos informations
  2. $loginpage = "https://monnouveausite.com"
  3. $username= "moncompte"
  4. $password= "monmotdepasse"
  5. # On crée l'objet qui va permettre l'ouverture de la page
  6. $ie = New-Object -com internetexplorer.application;
  7. # Tant que les champs 'User' et 'Password' n'ont pas été remplis, on cache la page
  8. $ie.visible = $false
  9. # Le browser navige jusqu'à la page de login définie plus haut
  10. $ie.navigate($loginpage)
  11. # Le script attend que la page charge
  12. while($ie.ReadyState -ne 4) {start-sleep -m 100}
  13. # On popule les champs requis par nos informations de login
  14. # Les ID sont ceux présents dans le code HTML de la page
  15. $ie.Document.getElementsByTagName("monlogin" ).value = $username
  16. $ie.Document.getElementsByTagName("elcode" ).value = $password
  17. sleep -Seconds 2
  18. # On clique sur le boutton, l'id est celui trouvé dans le code HTML
  19. $ie.Document.getElementsByTagName("go" ).click()
  20. # A ce moment on affiche la page web
  21. $ie.visible=$true


(le code est bien plus lisible sur le lien mais sans mes petites modif' évoquées :) )
 
 
 
Le résultat est que la page d'ouvre bien... Mais il ne se passe rien !
Les champs ne se remplissent pas, et le formulaire n'est pas soumis.
 
Je n'ai pas d'erreur, je ne vois pas ou cela bloque... ?
 
D'avance, merci à vous ! :)
 
Jpass


Message édité par jpass2 le 04-01-2019 à 14:50:40
mood
Publicité
Posté le 03-01-2019 à 16:27:53  profilanswer
 

n°2327097
rat de com​bat
attention rongeur méchant!
Posté le 03-01-2019 à 16:54:28  profilanswer
 

getElementsByTagName returne un tableau, il faut donc rajouter le bon indexe. Par contre c'est pas la bonne fonction je pense, c'est pour des tag HTML genre <div> ou <input>, pas pour des name=. On pourrait tenter un getElementsByTagName("input" )[0/1]. Et je suis pas sûr si il faut pas mettre de minuscule à "Document".

n°2327147
jpass2
Posté le 04-01-2019 à 12:20:14  profilanswer
 

Salut Rat de combat,
 
Merci de ton retour mais je suis franchement désolé, je n'ai pas tout compris à ce que tu essayes de me faire comprendre ! Je n'ai probablement pas encore une expérience suffisante pour en être capable :)
 
Si tu peux ré expliciter, merci :)  
 
La seule affirmation que je peux te dire, c'est que le bout de code original fonctionne sur mail365, donc avec un D majuscule à "Document" :)
 
Merci !!

n°2327152
David Bori​ng
Posté le 04-01-2019 à 13:45:04  profilanswer
 

Comme tu as 4 types différents, tu peux faire  

Code :
  1. document.querySelectorAll('input[type=text]')[0].value = $username;
  2. document.querySelectorAll('input[type= password]')[0].value = $password;


 

n°2327156
jpass2
Posté le 04-01-2019 à 14:10:45  profilanswer
 

David Boring a écrit :

Comme tu as 4 types différents, tu peux faire

Code :
  1. document.querySelectorAll('input[type=text]')[0].value = $username;
  2. document.querySelectorAll('input[type= password]')[0].value = $password;
 



Salut David, merci de ton aide !

 

J'ai remplacé ces 2 lignes : $ie.Document.getElementsByTagName("monlogin" ).value = $username et $ie.Document.getElementsByTagName("elcode" ).value = $password par ce que tu m'as donné (avec et sans le "$ie." ) mais... pas mieux...  :??:


Message édité par jpass2 le 04-01-2019 à 14:15:48
n°2327157
David Bori​ng
Posté le 04-01-2019 à 14:17:11  profilanswer
 

En vrai js, cela fonctionne pourtant.
Désolé, je ne connais pas PowerShell
 

n°2327158
jpass2
Posté le 04-01-2019 à 14:33:08  profilanswer
 

Peut-être un début d'explication, j'ai rajouté des espions :  
 
write-host T1
while($ie.ReadyState -ne 4) {start-sleep -m 100}  
write-host T2
 
Le T2 ne s'affiche jamais... ?
C'est pourtant un code qui est utilisé partout.
Qui plus est, lorsque je test la version originale du code, tout fonctionne correctement... ?
Je n'ai pas changé grand chose mais cela vient forcément de là...  :whistle:  
 
Merci.


Message édité par jpass2 le 04-01-2019 à 15:57:57
n°2327160
MaybeEijOr​Not
but someone at least
Posté le 04-01-2019 à 15:30:22  profilanswer
 

Et la page continue de s'afficher ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2327163
jpass2
Posté le 04-01-2019 à 15:56:58  profilanswer
 

yes...
Elle me nargue de s'afficher sans aucune erreur apparente ! :@

n°2327164
MaybeEijOr​Not
but someone at least
Posté le 04-01-2019 à 16:29:26  profilanswer
 

Quel est le contenu de la fameuse page ? Une fois affichée, il n'ya plus rien qui charge nulle part ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
mood
Publicité
Posté le 04-01-2019 à 16:29:26  profilanswer
 

n°2327189
jpass2
Posté le 05-01-2019 à 00:40:16  profilanswer
 

MaybeEijOrNot a écrit :

Quel est le contenu de la fameuse page ? Une fois affichée, il n'ya plus rien qui charge nulle part ?

 

C'est à dire ?
Bah c'est le site normal qui charge.
Mais les champs en questions dans le script ne s'"auto-complete" pas.


Message édité par jpass2 le 05-01-2019 à 00:41:10
n°2327190
MaybeEijOr​Not
but someone at least
Posté le 05-01-2019 à 00:55:09  profilanswer
 

Par "contenu", j'entendais le code source.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2327205
jpass2
Posté le 05-01-2019 à 16:06:53  profilanswer
 

MaybeEijOrNot a écrit :

Par "contenu", j'entendais le code source.


Ah pardon, j'ai mis l'extrait du code tout en haut de mon premier topic ;)
D'avance, merci à toi :)

n°2327221
MaybeEijOr​Not
but someone at least
Posté le 05-01-2019 à 18:30:32  profilanswer
 

Si tu ne passes pas le ie.readystate c'est que visiblement ton internet explorer continu de charger quelque chose, si le problème n'intervient qu'avec ta page c'est que ça vient d'elle. Et clairement pas de cet extrait de code.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2327242
jpass2
Posté le 05-01-2019 à 21:44:23  profilanswer
 

MaybeEijOrNot a écrit :

Si tu ne passes pas le ie.readystate c'est que visiblement ton internet explorer continu de charger quelque chose, si le problème n'intervient qu'avec ta page c'est que ça vient d'elle. Et clairement pas de cet extrait de code.


Pourtant la seule chose que j'ai modifié sur mon PS1 c'est que j'ai remplacé getElementById (qui fonctionne avec un autre site) par getElementsByName.

n°2327245
MaybeEijOr​Not
but someone at least
Posté le 05-01-2019 à 23:11:11  profilanswer
 

C'est bien ce que je dis, apparemment le problème ne vient pas du script mais du code source du site.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2327260
rufo
Pas me confondre avec Lycos!
Posté le 06-01-2019 à 11:09:17  profilanswer
 

David Boring a écrit :

Comme tu as 4 types différents, tu peux faire  

Code :
  1. document.querySelectorAll('input[type=text]')[0].value = $username;
  2. document.querySelectorAll('input[type= password]')[0].value = $password;


 


Je pense que c'est parce que tu utilises JQuery, une lib JS à laquelle il ne va pas avoir accès.
En JS, document.getElementsByTagname() retourne effectivement un tableau. Le paramètre à mettre est le nom d'une balise (tagname = nom de balise).
$MonTableau = $ie.Document.getElementsByTagName("input" );
$MonTableau va comporter des objets de type balise HTML avec leurs attributs value, name...
Par contre, je doute que par ce procédé tu puisses visualiser ton formulaire se remplir. Je pense que les actions sont effectuées en mémoire (mais à vérifier). Si j'ai raison, il faut que tu passes par un langage type AutoIt.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2329449
jpass2
Posté le 20-02-2019 à 14:28:18  profilanswer
 

MaybeEijOrNot a écrit :

C'est bien ce que je dis, apparemment le problème ne vient pas du script mais du code source du site.


Pourtant le code source est vraiment très simple (celui affiché en haut...)
 
D'avance, merci.

n°2329480
MaybeEijOr​Not
but someone at least
Posté le 20-02-2019 à 20:08:53  profilanswer
 

S'il y a juste les 4 lignes données plus haut, ce n'est pas étonnant que ça ne fonctionne pas. Cela ne respecte pas la structure d'une page HTML et doit retourner une flopée d'erreurs ce qui conduit ton script à considérer que la page n'est pas chargée.
 
 
Remplace :

Code :
  1. while($ie.ReadyState -ne 4) {start-sleep -m 100}


 
Par :

Code :
  1. start-sleep -m 1000


 
Tu verras bien ce qu'il te dit, mais ce n'est pas gagné, car s'il considère que la page n'est pas chargée c'est que le DOM est mal monté, du coup il n'arrivera pas forcément à le manipuler...


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  PowerShell : Compléter champs web

 

Sujets relatifs
[SQLSERVER] Trim aléatoire (??) sur les champs charPowershell[Topic Unik]
Créer un lien hypertexte en powershellRemplacer une lettre dans .txt POWERSHELL
Comment faire un saut à la ligne PowershellRécupérer la date du résultat [POWERSHELL]
[POWERSHELL] Récupérer les utilisateurs sur un serveur TSE[Powershell] Récupérer SID
Système de log de champs de BD mis à jourFaire des scripts quant ta 0 connaissance =( PowerShell
Plus de sujets relatifs à : PowerShell : Compléter champs web


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR