Instance d'objet WebBrowser [Résolu]

Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
- - Dernière réponse : theflayer
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
- 13 août 2012 à 17:30
Salut à tous.

Petite question, j'utilise un WebBrowser et j'y entre directement les informations de l'identifiant et mot de passe de la page html. Une fois chargée, la page Web s'ouvre sans soucis et bloque après avoir entré avec succès l'identifiant et le mot de passe.
Cela me renvoi cette exception :

"La référence d'objet n'est pas définie à une instance d'un objet."
sur la ligne suivante :
document.GetElementById("username").SetAttribute("value", "Admin");

Voici mon code.

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            HtmlDocument document = this.webBrowser1.Document;
            document.GetElementById("username").SetAttribute("value", "Admin");
            document.GetElementById("password").SetAttribute("value", "MonPass");
            document.GetElementById("login-form-submit").InvokeMember("click");


Merci d'avance

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
30
3
Merci
Tu ne peux pas ajouter un espion juste sur SetAttribute(xxxx)
Il faut le faire sur toute l'expression : document.GetElementById("username").SetAttribute("value", "Admin");
Mais je peux te garantir que si tu as une NullReferenceException sur cette ligne, c'est soit que document est null, soit qu'il ne trouve pas d'élément avec un id "username".
Il n'y a pas d'autre possibilité.

Si ton document n'est pas null et que tu veux voir l'ensemble des id des éléments dans ton document, tu peux ajouter ce code (avant la ligne qui plante) :
[code=cs]StringBuilder sb = new StringBuilder();
foreach (HtmlElement elt in document.All)
{
sb.Append(elt.Id).Append(" - ");
}
MessageBox.Show(sb.ToString());[code]
Ainsi, tu verras que tu n'as pas l'id "username" (attention à la casse).

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 204 internautes nous ont dit merci ce mois-ci

Commenter la réponse de krimog
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
2
0
Merci
A la limite, j'ai catcher pour passer l'erreur, mais je préférerais comprendre si possible :)

Merci.

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
Commenter la réponse de theflayer
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
0
Merci
Bonjour,

Es tu sur que les 3 id existent sur ta page et surtout qu'ils possèdent tous l'attribut value?
L'erreur laisse penser que tu essaies de modifier un élément ou un attribut qui n'existe pas.
Commenter la réponse de cs_L0ci
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
30
0
Merci
Salut

"La référence d'objet n'est pas définie à une instance d'un objet."
signifie
"J'accède à un membre sur une référence nulle"
c'est-à-dire
"Je fais quelqueChoseDeNull.AutreChose"

Ton code est celui-ci :
document.GetElementById("username").SetAttribute("value", "Admin");

Tu as 2 ".", donc deux endroits qui peuvent être la source de l'exception :
- document
- document.GetElementById("username")

C'est à ça que sert le débugger de Visual Studio. Quand tu as l'exception, sélectionne "document", fais clic-droit => Add Watch (ajouter un espion en français, je crois). Tu verras si ça a une valeur ou si c'est null.
S'il n'est pas null, tu sélectionne document.GetElementById("username"), puis même procédure. Logiquement, si ce n'est pas document qui est null, ça ne peut qu'être le document.GetElementById("username").

Une fois que tu sais quel élément est null, à toi de voir pourquoi il l'est, et de corriger le problème (de mon côté, je pense que ton document ne contient tout simplement pas d'élément avec comme id "username").

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
2
0
Merci
Salut L0ci, Salut Krimog,

Alors en ce qui concerne les "username" et "password" je suis certain qu'ils existent.
D’ailleurs les 2 se remplissent avec les valeur que je leurs donne via les 2 lignes suivantes :

document.GetElementById("username").SetAttribute("value", "Admin");
document.GetElementById("password").SetAttribute("value", "MonPass");

et quand je catch l’exception, tout fonctionne bien, je me suis bien logger sur le site.
ps : j'ai fait comme ceci "catch (NullReferenceException) { }"

Krimog, j'ai fais comme tu m'as dit, j'ai ajouter un espion, cela m'affiche sur cette ligne :

document.GetElementById("username").SetAttribute("value", "Admin");

"Le nom 'SetAttribute' n'existe pas dans le contexte.

Mais pourquoi cela se log quand même quand je met le catch ?
Merci d'avance.

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
Commenter la réponse de theflayer
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
2
0
Merci
Ok, bon j'ai mit l'espion sur document.GetElementById("username")

Il me renvoi bien "null" comme tu le pensais. Mais la je suis perdu. Tien le code HTML

<form method="post" action="?node=login" id="login-form">
<label for="username">Username</label>

<label for="password">Password</label>

<label for="language">Language</label>
<select name="ulang" id="language" /><option value="it_IT.UTF-8">it_IT.UTF-8</option>
<option value="en_US.UTF-8" selected="selected" >en_US.UTF-8</option>
<option value="es_ES.UTF-8">es_ES.UTF-8</option>
<option value="zh_CN.UTF-8">zh_CN.UTF-8</option>
</select>
<label for="login-form-submit"></label>

</form>


Et puis du coup je comprend vraiment pas pourquoi si je passe l'erreur , mes champs username et password se remplissent et la connexion au site ce fait parfaitement En tous cas merci pour l'espion c'est bien utile !

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
Commenter la réponse de theflayer