【问题标题】:C# Webbrowser navigating links in orderC# Webbrowser 按顺序导航链接
【发布时间】:2012-03-25 17:22:01
【问题描述】:

我正在尝试自学 C#,并开始尝试转换我最初用 Autoit 编写的程序。

我正在使用 Windows 应用程序表单,并且该程序假定将一两个链接作为输入。导航到这些页面,从表格中获取一些链接,然后访问每个页面以获取一些内容。

如果只输入一个链接,它似乎会转到该页面并从表格中获取链接,就像它假设的那样。如果输入了两个链接,它似乎只能从第二个表中获取链接。

所以如果两个链接都通过这个方法

    private void getPageURLList(string site1, string site2)
    {
        getPageURLList(site1);
        getPageURLList(site2);           
    }

调用与只有一个链接时调用的方法相同的方法

    private void getPageURLList(string site)
    {
        webBrowser.DocumentCompleted += createList;
        webBrowser.Navigate(site);
    }

我很确定问题是在 createList 第一次启动之前第二次调用了“导航”。

我使用 WebBrowser 的原因是因为这些页面使用 Javascript 对表中的链接进行排序,因此 HTTPRequests 和 HTMLAgilityPack 似乎无法抓取这些链接。

所以我想我的问题是:在我完成当前页面上的操作之前,如何让我的 WebBrowser 不导航到新页面?

【问题讨论】:

    标签: c# navigation browser


    【解决方案1】:

    您必须创建一个 bool 变量才能知道第一个进程何时完成。然后开始另一个。 Application.DoEvents() 会帮助你。

    请注意,所有这些事件都在主线程中运行。

    【讨论】:

    • 我曾尝试使用 bool 来做到这一点,但要么它不起作用,要么我把它放在错误的地方。我将不得不查看 Application.DoEvents() 以查看是否可以解决我的问题。
    • 在文档中完成:jobDone = true;并在代码中 getPageURLList(site1);工作完成 = 假; while(!jobdone){ApplicationDoEvents();} getPageURLList(site2);搜索一下就会发现
    • 这些似乎已经解决了。它正在运行两个链接。它第二次运行第二个链接,但这可能是我的代码的问题。
    【解决方案2】:

    在您的 documentcompleted 事件中,您进行链接处理。在链接处理结束时,您可以让浏览器导航到下一个 url

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多