c#screen scraping project - webbrowser不更改url

时间:2012-07-23 11:19:42

标签: c# browser screen-scraping web-scraping

我正在制作一个小型自动化项目,并且已经打了一堵砖墙。首先,我想说明我在项目的这个组件中使用webbrowser的唯一原因是被抓取的网站有混淆的代码并且需要一个支持java的浏览器来显示代码,我有另一个使用webclient的应用程序工作适用于其他测试站点,但不幸的是不能用于此目标

尝试以编程方式配置web浏览器控件时出现问题

我发现的第一个问题是,如果我手动设置控件属性中的url,它会加载第1页,并且刮刀适用于该页面。
但是,我继续清除属性中的url并在Form1_Load方法中手动设置它,但它返回about:blank作为url尽管事实我已经验证了自动参数被拉入是很好并且应该是设置没有问题

以下是我正在使用的内容:

注意:
集合是指XML序列化的定义数组 定义是指此目标的活动定义,其目的是为多个目标配置此目标

    private void Form1_Load(object sender, EventArgs e)
    {
        PopulateScraperCollection();
        webBrowser1.Url = new Uri(collection.ElementAt(b).AccessUrl);
        NavigateToUrl(collection.ElementAt(b).AccessUrl);
    }

    public void PopulateScraperCollection()
    {
        string[] xmlFiles = Directory.GetFiles(@"E:\DealerConfigs\");
        foreach (string xmlFile in xmlFiles)
        {
            collection.Add(ScraperDefinition.Deserialize(xmlFile));
        }
    }

    public void NavigateToUrl(string url)
    {
        Console.WriteLine(collection.ElementAt(b).AccessUrl);
        webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
        webBrowser1.Navigate(webBrowser1.Url);
    }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        WebBrowser wb = sender as WebBrowser;
        Process(collection.ElementAt(b), 0);
        b++;
    }

因此,这会导致使用DocumentCompleted导航到分页结果的另一个问题。在第一页加载时,我使用DocumentCompleted事件来触发链接提取。
当我尝试设置下一页的URL时,使用xpath正确选择并再次验证,使用F10在调试中跳过表示它没有被更改并且DocumentCompleted事件没有被触发

我更改网址等的代码是:

string nextPageUrl = string.Format(definition.NextPageUrlFormat, WebUtility.HtmlDecode(relativeUrl));
webBrowser1.Url = new Uri(nextPageUrl);
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
webBrowser1.Navigate(webBrowser1.Url);

任何帮助一如既往地非常感激,这被证明是自动化的噩梦,不仅因为WebBrowser比WebClient慢得多,而且它证明了动态改变的痛苦

此致

百里

1 个答案:

答案 0 :(得分:1)

你永远不应该真正设置webBrowser1.Url,你应该只使用Navigate void,所以

private void Form1_Load(object sender, EventArgs e)
{
    PopulateScraperCollection();
    NavigateToUrl(collection.ElementAt(b).AccessUrl);
}

我的猜测是为什么它不导航,是集合.ElementAt(b).AccessUrl为null或about:blank

我不确定如何回答你的问题,但Navigate void应该改变它

注意:WebBrowser控件是正确的废话,您可以尝试另一个WebBrowser控件,如Awesomium或GeckoFX