使用多线程c#控制台应用程序登录网站

本文关键字:应用程序 登录 网站 控制台 多线程 | 更新日期: 2023-09-27 18:08:41

我需要设计一个多线程应用程序登录到一个网站。到目前为止,我能够加载到页面不使用线程。但是我被困在登录按钮点击el.InvokeMember("点击");,它没有通过这个并加载主页。在我的例子中,我使用pinterest登录,任何帮助设计一个多线程控制台应用程序登录到一个网页将是伟大的。

下面是我的代码:
 private static bool completed = false;
    static string body = "";
    private static WebBrowser wb;
    [STAThread]
    static void Main(string[] args)
    {
        //http://stackoverflow.com/questions/4269800/webbrowser-control-in-a-new-thread
        //http://www.codeproject.com/Questions/197007/How-Use-WebBrowser-without-winform
        wb = new WebBrowser();
        wb.ScriptErrorsSuppressed = true;
        wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LoginPageLoadedEvent);
      //  wb.DocumentCompleted += LoginPageLoadedEvent;
        wb.Navigate("https://www.pinterest.com/login");
        while (!completed)
        {
            Application.DoEvents();
            Thread.Sleep(100);
        }
        Console.Write("'n'nDone with it!'n'n");

    }
    static void LoginPageLoadedEvent(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        wb.DocumentCompleted -= LoginPageLoadedEvent;
        HtmlElementCollection theElementCollection = wb.Document.GetElementsByTagName("Input");
        foreach (HtmlElement curElement in theElementCollection)
        {
            string controlName = curElement.GetAttribute("name").ToString();
            if (controlName == "username_or_email")
            {
                curElement.SetAttribute("Value", "test@gmail.com");
            }
            if (controlName == "password")
            {
                curElement.SetAttribute("Value", "test123");
            }
        }

        HtmlElementCollection elc = wb.Document.GetElementsByTagName("button");
        foreach (HtmlElement el in elc)
        {
            if (el.GetAttribute("type").Equals("submit"))
            {
                el.InvokeMember("Click");
                break;
            }
        }
        wb.DocumentCompleted +=
            new WebBrowserDocumentCompletedEventHandler(LoginCompleteMainPageLoadedEvent);
        while (wb.ReadyState != WebBrowserReadyState.Complete)
        {
            Application.DoEvents();
            Thread.Sleep(100);
        }

    }
    static void LoginCompleteMainPageLoadedEvent(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        //Reading html data into text file
        string s = ((WebBrowser)sender).DocumentText;

        Console.WriteLine(wb.Document.Body.InnerHtml);
        System.IO.StreamWriter file = new System.IO.StreamWriter("c:''temp''test.txt");
        file.WriteLine(wb.Url.ToString());
        file.WriteLine(s);
        file.Close();
        wb.DocumentCompleted -= LoginCompleteMainPageLoadedEvent;
    }
    static void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (wb.ReadyState != WebBrowserReadyState.Complete)
            return;
        if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
            return;
        if (body == wb.Document.Body.InnerHtml) 
            return;
        body = wb.Document.Body.InnerHtml;

        Console.WriteLine(wb.Document.Body.InnerHtml);
        System.IO.StreamWriter file = new System.IO.StreamWriter("c:''temp''test1.txt");
        file.WriteLine(wb.Url.ToString());
        file.WriteLine(wb.DocumentText);
        file.Close();
        completed = true;
    }
}

使用多线程c#控制台应用程序登录网站

试试这个:

webBrowser1.Document.GetElementsByTagName("Form")[2].InvokeMember("submit");