2010-11-24 37 views
2

a essayé d'écrire un programme qui me connecte automatiquement dans un navigateur web en C#. Ceci est le code que je l'utilise au moment à cet effet:Webbrowser SetAttribute ne fonctionne pas (Mot de passe)

HtmlElementCollection pageTextElements = loginBrowser.Document.GetElementsByTagName("input"); 
     foreach (HtmlElement element in pageTextElements) 
     { 
      if (element.Name.Equals("username")) 
       element.SetAttribute("value", this.UserName); 
      if (element.Name.Equals("password")) 
       element.SetAttribute("value", this.Password); 
     } 

Il remplit le nom d'utilisateur, mais pas le mot de passe?): Googled autour mais il y a seulement quelques personnes qui ont commencé le sujet auquel personne n'a jamais répondu. /:

J'espère que quelqu'un peut m'aider. c'est la source auf le champ Mot de passe:

<input type="password" value="" maxlength="50" size="25" name="password" class="bginput"> 
+0

@Adam Maras Merci pour la clarification. Suppression de ma réponse, car je n'ai aucun conseil pour cela. –

+0

Avez-vous défini un point d'arrêt sur la ligne qui définit l'attribut du champ de mot de passe, juste pour voir s'il est même touché? –

+0

oui, je l'ai fait. il est frappé, s'exécute, mais ne met tout simplement pas le mot de passe dans la boîte. – Omegavirus

Répondre

3

Vous devez attendre jusqu'à ce que la mise à jour du document a été complété. DocumentCompleted méthode d'événement.

Si vous voulez voir ce qui se passe, créez un formulaire avec un Panel en haut et un WebBrowser en bas. Ajouter 3 TextBoxes, un Button et un autre TextBox. La méthode OnClick de la case suivante procédez comme suit:

webBrowser1.Document.GetElementById(this.textBox1.Text).SetAttribute(this.textBox2.Text, this.textBox3.Text); 
this.textBox4.Text = webBrowser1.Document.GetElementById(this.textBox1.Text).GetAttribute(this.textBox2.Text); 

Vous verrez que votre boîte Password sur vous remplissez le formulaire renseigne correctement.

Wayne

1

essayer de définir la propriété innerText comme ça, ça marche pour moi (vb.net):

Dim txtPassword As HtmlElement = browser.Document.GetElementById("ctl00_ContentPlaceHolder1_txtPassword") 

txtPassword.InnerText = "123456" 
+0

ne fonctionne pas pour moi /: pas d'erreur, il ne fonctionne tout simplement pas .. – Omegavirus

+0

Résolu le problème en écrivant tous les éléments dans une chaîne et y changer le & password = à & password = thepass;) fonctionne maintenant, merci à tous (: – Omegavirus

1

Aucune de ces travaillé pour moi, je pourrais appeler setAttribute() sur la zone de texte de nom d'utilisateur dans le gestionnaire d'événements DocumentCompleted() mais pas la zone de texte de mot de passe. J'ai finalement eu à travailler par:

HtmlElementCollection inputs = doc.GetElementsByTagName("input"); 
HtmlElement usr = inputs.GetElementsByName("username")[0]; 
usr.setAttribute("value", strUsername); 

HtmlElement pwd = inputs.GetElementsByName("password")[0]; 
pwd.GotFocus += new HtmlElementEventHandler(pwd_GotFocus); 
pwd.Focus(); 

ensuite dans le gestionnaire onFocus:

void pwd_GotFocus(object sender, HtmlElementEventArgs e) 
{ 
    HtmlElement pwd = (HtmlElement)sender; 
    pwd.SetAttribute("value", strPassword); 
} 

Je ne sais pas pourquoi cela fonctionne et l'autre ne fonctionne pas. J'ai essayé seulement de changer le mot de passe juste au cas où le document changerait de la définition du nom d'utilisateur interféré avec lui. Je suis même allé jusqu'à créer un autre contrôle WebBrowser, puis j'ai extrait le DocumentText de la source, j'ai trouvé et remplacé la valeur du mot de passe dans le HTML brut avant de définir le DocumentText sur le second WebBrowser et il n'a pas encore correctement défini la valeur .

J'aimerais connaître une solution plus propre si quelqu'un en a une

+0

Cela fonctionne aussi pour moi! J'ai essayé toutes sortes de façons .. cette étape semble fonctionner. – teapeng