PowerShell : Compléter champs web - Shell/Batch - Programmation
Marsh Posté le 03-01-2019 à 16:54:28
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".
Marsh Posté le 04-01-2019 à 12:20:14
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 !!
Marsh Posté le 04-01-2019 à 13:45:04
Comme tu as 4 types différents, tu peux faire
Code :
|
Marsh Posté le 04-01-2019 à 14:10:45
David Boring a écrit : Comme tu as 4 types différents, tu peux faire
|
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...
Marsh Posté le 04-01-2019 à 14:17:11
En vrai js, cela fonctionne pourtant.
Désolé, je ne connais pas PowerShell
Marsh Posté le 04-01-2019 à 14:33:08
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à...
Merci.
Marsh Posté le 04-01-2019 à 15:30:22
Et la page continue de s'afficher ?
Marsh Posté le 04-01-2019 à 15:56:58
yes...
Elle me nargue de s'afficher sans aucune erreur apparente ! :@
Marsh Posté le 04-01-2019 à 16:29:26
Quel est le contenu de la fameuse page ? Une fois affichée, il n'ya plus rien qui charge nulle part ?
Marsh Posté le 05-01-2019 à 00:40:16
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.
Marsh Posté le 05-01-2019 à 00:55:09
Par "contenu", j'entendais le code source.
Marsh Posté le 05-01-2019 à 16:06:53
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
Marsh Posté le 05-01-2019 à 18:30:32
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.
Marsh Posté le 05-01-2019 à 21:44:23
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.
Marsh Posté le 05-01-2019 à 23:11:11
C'est bien ce que je dis, apparemment le problème ne vient pas du script mais du code source du site.
Marsh Posté le 06-01-2019 à 11:09:17
David Boring a écrit : Comme tu as 4 types différents, tu peux faire
|
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.
Marsh Posté le 20-02-2019 à 14:28:18
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.
Marsh Posté le 20-02-2019 à 20:08:53
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 :
|
Par :
Code :
|
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...
Marsh Posté le 03-01-2019 à 16:27:53
Bonjour,
En PowerShell, je souhaite remplir des champs html automatiquement.
Le site html semble simple :
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. :
(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