【问题标题】:How to use Web Browser Control in for loop?如何在 for 循环中使用 Web 浏览器控件?
【发布时间】:2015-05-13 12:05:03
【问题描述】:

我正在开发网络爬虫,它可以检查来自同一网站的学生的成绩。我可以提交表单并选择元素,但问题是我想循环使用 Web 浏览器控件。

for (int i = 3910001; i < 391537; i++)
    {
      webBrowser1.Navigate(url);      
    }

基本上我想导航到 url 并提交表单并从返回的HTml 中选择一些元素。所以我使用了webBrowser1_DocumentCompleted

private void webBrowser1_DocumentCompleted(object sender, 

    WebBrowserDocumentCompletedEventArgs e)
        {
       // MessageBox.Show("I am in completed");

          HtmlElement form = webBrowser1.Document.GetElementById("form1");
          webBrowser1.Document.GetElementById("RollNo").SetAttribute("value", "100");
          HtmlElement btn = webBrowser1.Document.GetElementById("Submit");
          btn.InvokeMember("click");

        }

我想完成一个文档然后移动到另一个文档,但问题是首先循环完成然后最后webBrowser1_DocumentCompleted 只被调用一次。
这个问题有解决方案吗?
谢谢

【问题讨论】:

  • Example 使用async/await (C# 5.0)。 Example 没有 async/await (C# 2.0+)。

标签: c# webbrowser-control


【解决方案1】:

您需要删除循环并用更复杂的逻辑替换它。
每次文档加载完毕后,您都可以导航到下一个网址:

int count = 3910001;//that's your number
private void webBrowser1_DocumentCompleted(object sender,
    WebBrowserDocumentCompletedEventArgs e)
{
    HtmlElement form = webBrowser1.Document.GetElementById("form1");
    webBrowser1.Document.GetElementById("RollNo").SetAttribute("value", "100");
    HtmlElement btn = webBrowser1.Document.GetElementById("Submit");
    btn.InvokeMember("click");

    ++count;
    if(count<391537)//that's your Number too, but it does not make sense, Count is always smaller than 391537
        webBrowser1.Navigate(url);
}

背景是,WebBrowser 只能同时导航到一个网站。就像您在地址栏中输入网址并按回车键一样。然后在第一个站点完全加载之前输入第二个地址。第一次加载过程将被取消。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-31
    • 2011-06-17
    • 2023-04-03
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多