2012-03-25 48 views
1

我想教自己C#并开始我试图转换我最初写在Autoit中的程序。C#浏览器按顺序导航链接

我正在使用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浏览到一个新的页面,直到我完成了我在当前页面上做的事情?

回答

0

你必须做一个布尔变量来知道第一个进程何时完成。然后开始另一个。 Application.DoEvents()将帮助你。

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

+0

我尝试过使用bool来做到这一点,但是它不起作用,或者我把它放在错误的地方。我将不得不查看Application.DoEvents()以查看是否解决了我的问题。文档中已完成 – user1290695 2012-03-25 17:46:44

+0

:jobDone = true;并在代码getPageURLList(site1); jobDone = false; (!jobdone){ApplicationDoEvents();} getPageURLList(site2);搜索它,你会发现它 – ddarellis 2012-03-25 17:47:58

+0

这些似乎已经修复它。它正在运行这两个链接。它第二次运行第二个链接,但这可能是我的代码的问题。 – user1290695 2012-03-25 18:20:40

0

在您的documentcompleted事件中,您将执行链接处理。在链接处理结束时,您可以通过浏览器导航到下一个网址