2010-11-24 99 views
2

試圖編寫一個程序,在c#中的webbrowser中自動登錄我。這是我目前用於此目的的代碼:Webbrowser SetAttribute不起作用(密碼字段)

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); 
     } 

它填寫用戶名,但不是密碼? ): 谷歌搜索,但只有少數人開始話題,從來沒有人回答。 /:

希望有人能幫助我。 這是源AUF密碼字段:

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

@亞當馬拉斯感謝澄清。刪除我的答案,因爲我對此沒有任何建議。 – 2010-11-24 18:41:40

+0

您是否在設置密碼字段屬性的行上設置了一個斷點,以查看它是否被擊中? – 2010-11-24 18:42:59

+0

是的,我做過。它會被擊中,執行,但根本不會將密碼放在框中。 – Omegavirus 2010-11-24 18:58:38

回答

3

您需要等到文檔更新已經完成。 DocumentCompleted事件方法。

如果您想查看正在進行的操作,請使用頂部的Panel和底部的WebBrowser創建一個表單。添加3 TextBoxes,一個Button和另一個TextBox。下面的方框的OnClick方法,請執行以下操作:

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); 

你會看到你的Password您表格上框正確填充。

韋恩

1

嘗試設置innerText屬性這個樣子,這對我的作品(vb.net):

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

txtPassword.InnerText = "123456" 
1

沒有爲我工作上面,我就可以在DocumentCompleted()事件處理程序的用戶名文本框,但不是密碼文本框中調用setAttribute()。我最終得到了它的工作:

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(); 

中的onfocus處理程序然後:

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

我不知道爲什麼這個作品和其他沒有。我只嘗試更改密碼,以防萬一文檔從設置用戶名變爲干擾它。我甚至還創建了另一個WebBrowser控件,然後從源文件中取出DocumentText,在第二個WebBrowser上設置DocumentText之前,在原始html中設置密碼值並進行替換,然後再次沒有正確設置值。

我很想知道更清潔的解決方案,如果任何人有一個