[英]Login to Website using multi-threaded C# console Application
我需要设计一个多线程应用程序才能登录到网站。 到目前为止,我无需使用线程即可加载到页面。 但是我被困在登录按钮中,单击el.InvokeMember(“ Click”);,它没有越过这一点并加载主页。 在我的示例中,我使用的是Pintrest登录,设计多线程控制台应用程序以登录到网页的任何帮助都会很棒。
下面是我的代码:
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;
}
}
尝试这个:
webBrowser1.Document.GetElementsByTagName("Form")[2].InvokeMember("submit");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.