1

我正在从事一个小型自动化项目,但已经碰壁了。首先,我想说明我在项目的这个组件中使用 webbrowser 的唯一原因是被抓取的网站有混淆的代码,并且需要启用 java 的浏览器来显示代码,我有另一个使用 webclient 的应用程序可以工作对其他测试站点很好,但不幸的是不能用于这个目标

尝试以编程方式配置 webbrowser 控件时出现我的问题

我发现的第一个问题是,如果我在控件属性中手动设置 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 慢得多,而且事实证明在运行中进行更改很痛苦

问候

巴里

4

1 回答 1

1

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

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

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

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

注意:WebBrowser 控件是正确的废话,您可以尝试其他 WebBrowser 控件,例如 Awesomium 或 GeckoFX

于 2012-07-23T11:44:35.893 回答