Instance d'objet WebBrowser [Résolu]

theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention - 13 août 2012 à 10:37 - Dernière réponse : theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention
- 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 

Votre réponse

6 réponses

Meilleure réponse
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 13 août 2012 à 17:08
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é. -

Merci krimog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de krimog
theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention - 13 août 2012 à 10:46
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
cs_L0ci 224 Messages postés vendredi 26 novembre 2010Date d'inscription 11 juin 2013 Dernière intervention - 13 août 2012 à 11:57
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
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 13 août 2012 à 14:46
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
theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention - 13 août 2012 à 15:38
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
theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention - 13 août 2012 à 17:30
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.