2017-01-23 56 views
1

我希望能够打开一个网页,登录并能够在下一页上做的事情。 DoPlans不会执行。这是到目前为止我的代码...(我知道我有吨有很多的变量)如何使用多个WebBrowser文档完成

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     webBrowser1.Navigate("t"); 
    } 

    private void DoPlans(object sender, 
WebBrowserDocumentCompletedEventArgs e) 
    { 
     textBox1.AppendText("started"); 
     webBrowser1.Document.GetElementById("t").InvokeMember("Click"); 
     webBrowser1.Document.GetElementById("t").InvokeMember("Click"); 
     foreach (HtmlElement elem in webBrowser1.Document.GetElementsByTagName("input")) 
     { 
      if (elem.GetAttribute("value") == "Submit Weekend Plans") 
      { 
       elem.InvokeMember("Click"); 
      } 
     } 
    } 

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     webBrowser1.Document.GetElementById("username").SetAttribute("value", "t"); 
     webBrowser1.Document.GetElementById("password").SetAttribute("value", "t"); 
     foreach (HtmlElement elem in webBrowser1.Document.GetElementsByTagName("input")) 
     { 
      if (elem.GetAttribute("value") == "Login") 
      { 
       webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DoPlans); 
       elem.InvokeMember("Click"); 
      } 
     } 
    } 
} 
+0

你在里面订阅事件事件自己的事件处理程序。似乎是正确的方法。 – abatishchev

+0

我看到你正在寻找一个元素并点击它。但是你正在订阅错误的事件。如果点击确实起作用,那么Web浏览器将导航到另一个页面。这里同一个事件处理程序应该第二次触发。你只需要区分不同的页面。你可以尝试使用'e.Url'。 – abatishchev

回答

1

尝试是这样的:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    switch (e.Url.ToString()) 
    { 
     case "home page": 
     { 
      // fire click 
      break; 
     } 
     case "next page": 
     { 
      // handle logged in user 
      break; 
     } 
    } 
}