Comment remplir un formulaire d'une page html (Login et MDP) ?

miminooze Messages postés 18 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 31 janvier 2012 - 29 juin 2011 à 17:52
laurentiss Messages postés 22 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 30 mars 2019 - 11 sept. 2013 à 16:01
Bonjour,

Après quelques recherche sur internet, je cherche à remplir un formulaire d'une page html avec un webBrowser sous Visual Studio 2010, plus précisément remplir le champ utilisateur et mot de passe en C#.

Sous C++ builder cela ce fait de cette façon :

Variant vDocument = brwInt->ControlInterface->Document;
if (((IDispatch *)vDocument) != NULL)
{
Variant vForms = vDocument.OlePropertyGet("Forms");
Variant vForm = vForms.OleFunction("NamedItem","connection");
Variant vContent = vForm.OlePropertyGet("All");
Variant vLoginField = vContent.OleFunction("NamedItem","login");
Variant vPassField = vContent.OleFunction("NamedItem","password");
vLoginField.OlePropertySet("Value","UnLogin");
vPassField.OlePropertySet("Value","UnMotDePasse");
vForm.OleProcedure("Submit");
}


Si vous avez une idée,
merci d'avance :)

12 réponses

az1973 Messages postés 10 Date d'inscription samedi 2 décembre 2006 Statut Membre Dernière intervention 4 juillet 2012
30 juin 2011 à 09:27
Bon jour,
il faut utiliser la notion des objets DOM pour y accéder à une page html, pour cela dand le webbrowserDocumentComplete doit contenir le cose suivant (C#):

HtmlDocument document = webBrowser.Document;
if (document != null)
{
document.All["p0"].SetAttribute("value", userName);
document.All["p1"].SetAttribute("value", passWord);
document.Forms["saisie"].InvokeMember("submit");
}

où P0 est le champ nom d'utilisateur
P1 le mot de passe
et dans la forme -saisie- le boutton sutmit
Bonne chance.
0
miminooze Messages postés 18 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 31 janvier 2012
30 juin 2011 à 11:35
Merci pour ta réponse,
lorsque ma forme n'a pas de nom que dois-je mettre dans cette partie du code :
document.Forms[???].InvokeMember("submit");

sinon j'ai trouvé une autre méthode :

webBrowser.Document.All["username"].SetAttribute("value","monNomUtilisateur");
webBrowser.Document.All["password"].SetAttribute("value","monMotDePasse");
webBrowser.Document.GetElementById("login").Focus();
webBrowser.Document.GetElementById("login").InvokeMember("click");
0
az1973 Messages postés 10 Date d'inscription samedi 2 décembre 2006 Statut Membre Dernière intervention 4 juillet 2012
30 juin 2011 à 12:37
il faut prendre en consideration que vous êtes sur la bonne page :tester par rapport au titre
if document.titre =="authen....' puis faire l'affectation
0
miminooze Messages postés 18 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 31 janvier 2012
1 juil. 2011 à 12:27
Salut,
aurais tu une idée de comment on récupère une valeur entre des balises.

Par exemple :

<option value="9"> Texte à récupérer </option>

Récupérer uniquement le mot "Texte à récupérer".

J'ai trouvé ce bout de code sur MSDN, mais ça permet uniquement de prendre le contenu de "value" c'est à dire 9 dans ce cas là.

HtmlElementCollection elems = webBrowser.Document.GetElementsByTagName("option");
foreach (HtmlElement elem in elems)
{
String nameStr = elem.GetAttribute("value");
if (nameStr != null && nameStr.Length != 0)
{
MessageBox.Show(nameStr.ToString());
}

:)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
az1973 Messages postés 10 Date d'inscription samedi 2 décembre 2006 Statut Membre Dernière intervention 4 juillet 2012
3 juil. 2011 à 12:32
Salut,
si le tag a un id ou name l'accès seras facile par :
HtmlElement table_ecriture = document.GetElementById("table_ecriture");
sinon une collection des tag à chercher le tag qu'il faut:
HtmlElementCollection Tables = document.GetElementsByTagName("table");
dans une boucle
if (table.InnerText.Trim() == "TOTAL*")....


bonne chance
0
miminooze Messages postés 18 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 31 janvier 2012
3 juil. 2011 à 13:23
Salut,

Merci pour ta réponse,
pourrais-tu être plus clair quand tu parle de ta boucle ?


if (table.InnerText.Trim() == "TOTAL*")....

Merci encore.
0
az1973 Messages postés 10 Date d'inscription samedi 2 décembre 2006 Statut Membre Dernière intervention 4 juillet 2012
3 juil. 2011 à 14:04
exp : si la page contienne plusieurs table où l'id ou name inexstant tu vas determiner la table selon son contenu exp si la table contient total
là il faut faire le test
HtmlElementCollection Tables = document.GetElementsByTagName("table");
foreach (HtmlElement table in tables)
{
if (table.InnerText.Trim() == "TOTAL*")
{tritemen(table);}
}
0
miminooze Messages postés 18 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 31 janvier 2012
4 juil. 2011 à 21:11
Je ne saisie toujours pas ta réponse.
De plus, a quoi correspond ta méthode traitement ?

Par exemple le code se décompose comme ça :

<form method="post" name="jumpbox" action="./adresse.php" onsubmit="if(document.jumpbox.f.value == -1){return false;}"> 
 
Aller à: <select name="f" onchange="if(this.options[this.selectedIndex].value != -1){ document.forms['jumpbox'].submit() }">

<option value="-1">Texte1</option>
<option value="-1">texte2</option>
<option value="3">Texte3</option>

</select> 
 
 
</form>


En fait, j'aimerais récupérer "Texte1", "Texte2" et "Texte3".
0
az1973 Messages postés 10 Date d'inscription samedi 2 décembre 2006 Statut Membre Dernière intervention 4 juillet 2012
6 juil. 2011 à 09:33
Dans cet example la table n'as pas de nom, on va chercher la table qui contienne le texte "Aller à:"

HtmlElementCollection Tables = document.GetElementsByTagName("table");
foreach (HtmlElement table in tables)
{
if (table.InnerText.Trim() == "Aller à")
{
traitement(table);}
}

traitement (HtmlElement table )
{
MessageBox.Show(table.InnerText);
}

Methode à utiliser si vous avez besoin d'extraire des données d'une table
0
miminooze Messages postés 18 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 31 janvier 2012
6 juil. 2011 à 13:34
j'ai essayer de cette façon et ça ne fonctionne toujours pas.

 HtmlElementCollection Tables = webBrowser.Document.GetElementsByTagName("table");
            foreach (HtmlElement table in Tables)
            {
                if (table.InnerText.Trim() == "Aller à:")
                {
                    MessageBox.Show(table.InnerText);

                }
            }


Une autre idée ? :D
0
az1973 Messages postés 10 Date d'inscription samedi 2 décembre 2006 Statut Membre Dernière intervention 4 juillet 2012
6 juil. 2011 à 14:15
le code à inserer dans webbrowsercomplete
et essayé le débougage
0
laurentiss Messages postés 22 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 30 mars 2019
11 sept. 2013 à 16:01
Le sujet m'interesse. J'achete l ebout de source qui vas bien....
0
miminooze Messages postés 18 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 31 janvier 2012
8 juil. 2011 à 22:50
Re,

c'est à dire dans webbrowsercomplete ?
je vois pas du tout ou mettre le code.
0
Rejoignez-nous