C#WebBrowser调用问题

时间:2010-03-27 12:27:43

标签: c#

我使用网络浏览器登录facebook。一切正常,但问题是,当我调用按钮时,我需要检查密码是否正确但是,检查似乎在调用按钮之前发生,这完全没有意义,因为检查代码是在调用之后。 / p>

private void Facebook_Login(String username, String password)
    {
        webBrowser1.Url = new Uri("http://m.facebook.com");

        while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();

        HtmlElementCollection inputs = webBrowser1.Document.GetElementsByTagName("input");
        foreach(HtmlElement input in inputs)
        {
            if (input.GetAttribute("name") == "email") 
            {
                input.SetAttribute("value", "jamesjeffery@hotmail.co.uk");
            }
            if (input.GetAttribute("name") == "pass")
            {
                input.SetAttribute("value", "kelaroostj"); // dont worry that pass wont work lol.
            }
            if (input.GetAttribute("name") == "login")
            {
                input.InvokeMember("click");
            }
        }

        while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();

        HtmlElementCollection bs = webBrowser1.Document.GetElementsByTagName("b");
        foreach(HtmlElement b in bs)
        {
            MessageBox.Show(b.InnerHtml);
        }

        Log_Message("Logged into Facebook with: jamesjeffery@hotmail.co.uk");
    }

1 个答案:

答案 0 :(得分:1)

这是因为您正在循环所有HTML元素。你只需要“逻辑”顺序的代码,这并不意味着HTMLElementCollection也有它。

如果HTML按钮是行中的第一个元素,那么首先发生的是单击该按钮。

HtmlElement Username = Browsers[0].Document.GetElementById("name");
HtmlElement Password = Browsers[0].Document.GetElementById("pass");
HtmlElement LoginBtn = Browsers[0].Document.GetElementById("login");

Username.SetAttribute("value", "jamesjeffery@hotmail.co.uk");
Password.SetAttribute("value", "kelaroostj");
LoginBtn.InvokeMember("click");

这假设元素的ID如上所述。