Compléter un Textarea

Signaler
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,


Je cherche à remplir un "textarea" mais mon code ne fonctionne pas, le voici :

    Dim theElementCollectionX As HtmlElementCollection
theElementCollectionX = WebBrowser1.Document.GetElementsByTagName("textarea")
For Each curElement As HtmlElement In theElementCollectionX
curElement.InnerText = variabledetexte
Application.DoEvents()
Exit For
Next



Mon texte est bien affiché au bon endroit sur l'écran du webbrowser mais lorsque je clique sur "valider" j'ai un message d'erreur qui me dit que je n'ai pas entré de texte. Lorsque je fais un copier/coller du même texte au même endroit, tout fonctionne correctement.

Est-il possible qu'il y ai une histoire d'ajax ou autre et que lorsque "j'injecte" le code il ne soit pas vu ?

Je ne m'en sors pas de ce projet ! Merci pour votre aide.
A voir également:

12 réponses

Messages postés
32371
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mai 2021
347
Bonjour,

Je crois que tu peux utiliser .value au lieu de innerHTML ou innerText
   curElement.value = variabledetexte



Est-il possible qu'il y ai une histoire d'ajax ou autre et que lorsque "j'injecte" le code il ne soit pas vu ?

ah ça ... sans connaitre le code source de la page en question.. impossible de te répondre
mais bon.. j'en doute.

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour,
Mon texte est bien affiché au bon endroit sur l'écran du webbrowser mais lorsque je clique sur "valider" j'ai un message d'erreur qui me dit que je n'ai pas entré de texte.

Voilà qui révèle tout simplement l'existence d'une protection anti-"bot".
Dans ce cas, il semble qu'elle intervient au niveau de la manière (matérielle ou "par code") de l'attribution du focus.
Dans d'autres cas (pas celui-ci, apparemment) une protection intervient au niveau de la manière dont est faite la saisie.
Ces protections peuvent exister sous différentes formes. Pour la petite histoire, je sais par exemple en mettre en oeuvre y compris avec .... VB5 (même pas VB6) !

EDIT : c'est l'une (pas la seule) des raisons pour lesquelles je n'ai pas voulu participer à certaines discussions, dont (la dernière) celle-ci :
http://codes-sources.commentcamarche.net/forum/affich-10056730-webbrowser-simulation-d-enter-ou-clic-souris
La raison ? Elle est fort simple à comprendre : si le concepteur a mis en oeuvre de telles protections, il a ses raisons et je n'aiderai personne à passer outre.


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
32371
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mai 2021
347
Voilà qui révèle tout simplement l'existence d'une protection anti-"bot".

c'est l'une (pas la seule) des raisons pour lesquelles je n'ai pas voulu participer à certaines discussions, dont (la dernière)

Salut Uc,
Tu vois le mal partout ....

Le fait qu'il puisse éventuellement y avoir un script javascript qui se déclenche au focus ou au blur ne signifie en rien qu'il s'agisse d'une "protection" anti-bot...idem pour le fait de pouvoir cliquer sur un bouton sans id .....
Désolé de te contredire.. mais pour une fois tu es totalement à côté de la plaque !

Maintenant... il demanderait à contourner un capcha... là oui... je comprendrai ta remarque.... mais pour l'instant.........
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236 >
Messages postés
32371
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mai 2021

Bonjour, Jordane,
Et pourtant : regarde à nouveau ce qu'il a précisé :
Lorsqu'il entre normalement (manuellement, donc) dans cette zone de saisie et qu'il y colle (par copier/coller) son texte, tout fonctionne ensuite à la validation.
Lorsque, par contre, il saisit par code et alors même que son texte ainsi "injecté" est bel et bien affiché correctement dans la bonne zone de saisie, la validation ne marche pas et il lui est répondu que la zone de saisie de son texte est restée non renseignée.
Cela se fait bel et bien, en général, lorsque l'on veut empêcher des saisies autrement que manuellement. La philosophie de ce genre d'empêchement est totalement différente de celle d'un "capcha".
Les capcha sont eux en général utilisés au moment du login.
Certains jeux, par exemple, utilisent d'autres protections EN COURS DE JEU, donc bien après le login. On trouve parmi eux des jeux où le joueur doit SAISIR au clavier (une action, le choix d'une arme, etc ...).
Il n'y a pas que des jeux, d'ailleurs, qui sont dans ce cas.
Au passage : il existe une parade à CETTE protection là (celle-là). Elle est une simulation beaucoup plus complète à la dation du focus.


Mais bon ...
Laissons alberto nous éclairer.


Edit : tiens ===>> lisons ce qu'il a depuis écrit sur un autre forum (c'est bien plus édifiant)
Un coup de pouce serait vraiment le bienvenu car le problème n'est pas de remplir le textarea mais bien de prise en compte de celui-ci
Bonjour à tous et merci pour vos réponses.

Qu'y a-t-il d'édifiant dans ce que j'ai écris ???

Cela est étonnant de demander un coup de pouce sur un code et de se voir quasiment instantanément traiter comme un hacker, un bandit ou je ne sais quoi !

Si la plateforme dispose d'un système anti robot, serait-il tout de même possible que j'arrive à "piloter" toutes les autres étapes, créer des listes, remplir des champs (etc) car c'est actuellement le cas ?

Avant que des insinuations soit encore faites, je vais préciser qu'il s'agit d'une plateforme de laquelle je suis sous contrat et que je respecte les conditions générales d'utilisations et en aucun cas je ne fais de choses illégales.
Re,

Je viens de relire toute la discussion et j'avoue rester encore très étonné que cette phrase (Un coup de pouce serait vraiment le bienvenu car le problème n'est pas de remplir le textarea mais bien de prise en compte de celui-ci) puisse poser un problème d'éthique ou autre !

Je ne prétends à aucun moment maitriser le code ou autre et j'admets très volontier être mauvais et d'être simplement passé à coté de quelques choses de simples pour d'autres sans pour autant avoir la volonté de pirater la cia, le kgb ou na nasa...

Voici une partie du code source de la page
<div id="editor-html" class="div-ace ace_editor ace-tomorrow">
<textarea class="ace_text-input" wrap="off" autocorrect="off" autocapitalize="off" spellcheck="false" style="opacity: 0; height: 14px; width: 7px; left: 44px; top: 0px;"></textarea>
<div class="ace_gutter">
<div class="ace_layer ace_gutter-layer ace_folding-enabled" style="margin-top: 0px; height: 76px; width: 40px;">
<div class="ace_gutter-active-line" style="top: 0px; height: 14px;"></div>
</div>
<div class="ace_scroller" style="left: 40px; right: 0px; bottom: 0px;">
<div class="ace_scrollbar ace_scrollbar-v" style="display: none; width: 22px; bottom: 0px;">
<div class="ace_scrollbar ace_scrollbar-h" style="display: none; height: 22px; left: 40px; right: 0px;">
<div style="height: auto; width: auto; top: 0px; left: 0px; visibility: hidden; position: absolute; white-space: pre; font: inherit; overflow: hidden;">
</div>
<input id="mk-message" type="hidden" value="message" name="message">
<input id="mk-id_texte" type="hidden" value="0" name="id_texte">
<textarea id="code-source" name="code_source"></textarea>
<div class="listChamps">
<div class="div-optionnel pure-g-r">
</div>


J'ai eu du mal à identifier le bon endroit ou mettre le code (le terme injecté porte apparemment à confusion...). C'est pour cette raison que je suis passé simplement par "textearea" et non par l'ID car je n'ai pas réussi faire apparaitre le code comme cela.

Si je peux apporter des infos utiles, demandez-moi.

Merci à vous.
>
Messages postés
32371
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mai 2021

Merci pour ta réponse, aurais-tu un exemple car je n'ai jamais utilisé de focus.

Je vais faire des recherches également.
Messages postés
32371
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mai 2021
347
Après relecture du code js ... il semble qu'il y ai un onkeyup
textarea',function(){save=true;}).on('keyup','#editor-html',function(){save=true;});

mais là .. vu qu'il ne s'agit que fonctions anonymes...aucune idée pour contourner ceci...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236 >
Messages postés
32371
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mai 2021

Un salut matinal à tous les deux.
J'observe que le concepteur a très soigneusement choisi le caractère et les limites de la protection mise, puisqu'il ne permet pas l'injection par code, mais permet le copier/coller manuel, alors qu'une protection TOTALE n'aurait RIEN laissé passer de ce qui ne venait pas du clavier.
Lorsque l'on fait ainsi, c'est en général le client de l'appli , que l'on cherche à protéger d'attaques que faciliterait la présence de cette appli sur sa machine.
De quelles "attaques" pourrait-il s'agir ? ===>> tout simplement de tentatives de pompages faites sur la machine utilisatrice à l'insu de l'utilisateur, puis d'utilisation de l'appli pour transmettre ce qui aurait été "pompé".
Le copîer/coller qu'il a permis est le bienvenu en ce sens qu'il facilite la tâche de l'utilisateur (pour la transmission de données qu'IL a volontairement choisi de transmettre). Ce copier/coller est un acte DELIBERE, non suspect.
Il en va très différemment en ce qui concerne une "injection" par code qui, elle, pourrait être faite par un programme malveillant présent sur la machine à l'insu de son propriétaire et qui utiliserait, par exemple à certaines "fins", l'appli de transmission installée
C'est ce que je pense.
>
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018

Bonjour à vous,

Merci pour votre aide qui m'est précieuse.

Je dois m'absenter mais dès mon retour je vais explorer le piste "focus" et "onkeyup".

Je ne pense pas que la zone soit protégée, d'abord parce qu’ils me l'ont dit mais également car cette zone est déjà loin dans le processus et que je n'ai pas eu de problème pour manipuler des données plus sensibles telles que des listes de contacts etc...

Je vous tiens au courant !

Bon week end.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236 > Alberto
Ce n'est pas la zone, qui est protégée, mais la manière dont la saisie est faite.
Le caractère (sensible ou non) des données n'a rien à voir dans cette affaire. Leur traitement, sensible ou pas, répond toujours au même impératif : qu'il soit déclenché par une opération nécessitant une intervention manuelle, donc totalement contrôlée et délibérée. Ce qui, implicitement, exclut donc la possibilité de tâches automatisées (par code) dont la liste et l'exécution seraient décidées par un programme externe et dont on ne serait pas absolument certain qu'elles ont été décidées de manière parfaitement consciente et volontaire.
Une autre fois : si et seulement si ce que rapporte ton tout premier message est rigoureusement exact en ce qui concerne la différence de comportement dans un cas (copier/coller) et l'autre (injection par code).

EDIT : l'utilisation de certains évènements (keydown et keyup) peut être là dans le but de permettre, en complément de la stratégie montrée par mon exemple VB6, d'entrer dans la zone de texte également par les touches clavier (en plus de la souris).
Mais, dans tous les cas : la dation du focus devra se faire manuellement (sinon rejet).
Comme je l'ai dit hier : si ce type de protection est resté au niveau rudimentaire (et cela m'étonnerait beaucoup), il est relativement facile à contourner. Mais si d'autres barrières/contrôles ont été placées, le contournement sera aussi complexe qu'un labyrinthe, sauf à connaître la nature exacte de ces barrières complémentaires (et leur combinaison).
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
1) Tu cherches midi à quatorze heures en ce qui concerne le terme "édifiant" que j'ai utilisé.
Il signifie pourtant assez clairement ce que j'ai exposé plus haut, à savoir que le concepteur de cette appli n'accepte pas que ce "textarea" soit saisi par code (mais uniquement par la voie manuelle).
2)
...je vais préciser qu'il s'agit d'une plateforme de laquelle je suis sous contrat...

devrait alors te simplifier la vie ===>> prends donc l'attache du concepteur de cette appli et demande-lui directement comment contourner la "barrière" qu'il a installée...
Mon intervention s'arrête maintenant là. Je n'ai aucune envie (ni raison) de me substituer à lui...
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Je ne tiens pas rigueur de l'échange, il s'agit simplement de mots mal compris par écrit.

Sans demander de contourner le blocage s'il existe, te serai-il possible de jeter un œil pour vérifier et me dire simplement si oui ou non un système de blocage existe ? Si tu acceptes je te ferai passer toutes les infos pour aller sur la page en question.

J'ai contacté le support mais je ne pense pas avoir une réponse rapide.
Bonjour,

Ça avance doucement mais surement.

Les responsables techniques de la plateforme me garantissent qu'il n'y a pas de protection "anti-robot".

Ce qui peut paraitre logique puisque d'une part il est possible de faire toutes les étapes avant et d'autre part, il y a déjà pas mal de sécurité d'utilisation.

La chose la plus probable est donc un mauvais code de ma part.

Si le cœur vous en dit de me donner un coup de main, cela sera avec plailisir !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Désolé, mais si tout ce que tu as dit dans ton tout premier message est rigoureusement exact (succès au click de validation si texte entré par copier/coller et insuccès au click de validation si saisie fructueuse du texte par code), ce ne peut qu'être le résultat d'une acceptation subordonnée à un évènement. En l'absence de l'évènement concerné (probablement la dation du focus), le texte saisi n'est pas accepté. Cela est généralement organisé via une variable tremplin et une booléenne.
Exemple sommaire bâclé de mise en place de ce type de barrière en VB5 ou VB6 :
sur un form
Une textbox text1, et 2 boutons de commande command1 et command2
- si l'on copie/colle du texte dans text1 ===>> le click sur command2 ne provoque rien
- si l'on saisit manuellement du texte dans text14, le click sur command2 ne provoque rien
- mais si l'on injecte du texte par code depuis command1 ("coucou"), le click sur command2 dénonce ...

 Private toto As Boolean

Private Sub Command2_Click()
Dim titi As String
If Not toto Then
titi = ""
Else
titi = Text1.Text
End If
toto = False
traiter titi
End Sub

Private Sub Command1_Click()
Text1.SetFocus ' même en donnant le focus
DoEvents
Text1.Text = "coucou"
End Sub

Private Sub Form_Load()
toto = False
End Sub


Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
toto = True
End Sub

Private Sub traiter(titi As String)
If titi = "" Then
MsgBox "vous n'avez rien saisi"
Else
' instructions suivantes
End If
End Sub

Observons que même la dation du focus avant injection par code ne suffit pas à lever cette interdiction car cette dation n'est pas suffisante
Voilà ...
A noter également que ce petit bout de code que je viens de bâcler est très rudimentaire et limité. Je sais faire bien plus complexe encore.
Bonne chance
Bonsoir Ucfoutu,

Merci pour ces conseils et ce code.

Je vais me pencher dessus dès mon retour (lundi matin).

Je te tiendrai informé de mes avancés.

Bonne soirée.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236 > alberto
Bien.
Maintenant :
si le concepteur s'est contenté de cette protection rudimentaire (ce qui m'étonnerait assez), la parade est relativement simple et ne devrait pas t'échapper si tu réfléchis un peu et relis attentivement chacun des mots de l'un de mes messages précédents.
Si par contre (relis-moi plus haut), il y a ajouté du "sel et du poivre" (hé oui ...) , ce sera beaucoup plus compliqué à contourner.
Voilà. Bonne chance.
Bonjour,

De retour, prêt à replonger dans la recherche de solution. Je viens d'essayer de mettre un focus :

 Dim theElementCollectionY As HtmlElementCollection
theElementCollectionY = WebBrowser1.Document.GetElementsByTagName("textarea")
For Each curElement As HtmlElement In theElementCollectionY
curElement.Focus()
curElement.InnerText = scorps
Application.DoEvents()
Exit For
Next


Si ce code est bon, alors il ne fonctionne pas :-(

J'avoue que j'ai du mal à imaginer "Comme je l'ai dit hier : si ce type de protection est resté au niveau rudimentaire (et cela m'étonnerait beaucoup), il est relativement facile à contourner". J'aimerais au moins essayer pour voir si ca fonctionne mais je ne sais pas par ou commencer.

Je vais essayer de lire un peu sur les keydown et keyup car je ne sais pas ce que c'est.

Je vous tiens informé.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Je crois t'avoir dit plus haut (dans le message avec mon code vb6 de démo) que donner ainsi le focus ne suffisait pas à tromper une telle protection, non ?
pour mémoire :
Observons que même la dation du focus avant injection par code ne suffit pas à lever cette interdiction car cette dation n'est pas suffisante

Je t'ai également dit (toujours plus haut) que la seule manière (réalisable ... et je sais faire) de contourner une telle protection serait une simulation bien plus complète de dation de focus (et encore ... uniquement si le concepteur s'est contenté de cette seule protection rudimentaire ...) non ?
Et je t'ai également dit (dès le début) que je n'aiderai en aucun cas à un tel contournement, si le concepteur a décidé de cette protection.
Bonne chance.

EDIT : que te dire de tout ce que peut provoquer en moi cette lecture de tes mots :
Je vais essayer de lire un peu sur les keydown et keyup car je ne sais pas ce que c'est.

Ils donnent à penser que tu ne saurais pas non plus ce qu'est un évènement, quand il est constaté et ce qu'il permet lorsqu'il est constaté (et ceci : quel que puisse être le langage de développement.
Le paradoxe entre cette carence et ce que tu cherches à faire est d'autant plus stupéfiant, que la constatation d'un évènement est la base même de la protection qui semble avoir bel et bien été installée.
Il est toujours difficile (voire carrément impossible) de se mettre au manche d'un avion de chasse si l'on ignore encore les fonctionnalités d'un guidon de bicyclette).
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Bonjour ucfoutu,

Je ne pensais pas répondre, mais vu que je suis repassé ce jour pour relire la discussion et que je viens de voir ton dernier message agrémenté d'un EDIT, je vais tout de même répondre.

Je trouve tes messages vraiment très hautins et pleins d'inutilités. Quant à savoir ce que provoque en toi mes écrits, d'une part je n'en ai rien à faire, et d'autres part je pense je pense pouvoir dire que la réciprocité est proportionnelle voir exponentielle.

Bref, je te remercie tout de même d'avoir pris le temps de participer et me répéter que, globalement, tu savais tout faire mais que tu ne ferais rien, que tu savais tout mais ne dirais rien et que je suis un incapable du code.

Je préfère garder mes questions pour moi que d'avoir à refaire à toi.

Sans rancunes.

Bonne continuation.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bien, alberto : voilà qui est noté.
Je ne participerai donc plus jamais à toute demande venant de toi.
Bonne chance.

EDIT : en te rappelant ma position, dès mon tout premier message...
(rien de "hautain" ... et tout de respectueux de la volonté du concepteur ...)
Si tu veux une solution à ton problème, alberto, expose-le donc complètement au concepteur de cette appli et demande-lui de remédier (dans son code) à cette problématique. Voilà.

EDIT 2 : (je suis gentil) : j'observe que la zone de texte considérée est totalement transparente et me suis dit que ce n'était peut-être pas pour rien. Je me suis donc amusé (à l'instant) à voir comment, à partir de là, on pouvait forcer la main à un geste physique. Eh oui (fait très facilement) ! On feinte ainsi habilement l'utilisateur. Tout copier/coller à l'aide du clavier ou de la souris sera mis dans la vraie zone te texte, sans même que l'utilisateur ne s'aperçoive qu'il n'est plus là où il est allé. Une injection par code, par contre le laissera là où injecté (dans la zone/leurre transparente) et la zone réelle de texte restera vide.
Voilà. Je te laisse maintenant définitivement.


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.