我现在正在做一个小的自动化项目,遇到了困难。首先,我想说明的是,我在该项目的这个组件中使用网络浏览器的唯一原因是,被抓取的网站有模糊的代码,需要一个启用java的浏览器来显示代码,我有另一个使用网络客户端的应用程序,它对其他测试网站很好,但不幸的是,它不能在这个目标上使用
我的问题出现在尝试用程序配置网络浏览器控件时
我发现的第一个问题是,如果我在控件属性中手动设置url,它会加载第1页,并且scraper适用于该页
然而,我继续清除属性中的url,并在Form1_Load方法中手动设置它,但它返回了大约:空白,因为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事件也没有触发
我更改url等的代码是:
string nextPageUrl = string.Format(definition.NextPageUrlFormat, WebUtility.HtmlDecode(relativeUrl));
webBrowser1.Url = new Uri(nextPageUrl);
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
webBrowser1.Navigate(webBrowser1.Url);
我们一如既往地感谢您的帮助,事实证明,这是一场自动化的噩梦,不仅因为WebBrowser比WebClient慢得多,而且事实证明,在飞行中更改是一种痛苦
问候
Barry
你永远不应该真正设置webBrowser1.Url,你应该只使用Navigate void,所以
private void Form1_Load(object sender, EventArgs e)
{
PopulateScraperCollection();
NavigateToUrl(collection.ElementAt(b).AccessUrl);
}
我的猜测是,它为什么没有导航,是因为收藏。ElementAt(b)。AccessUrl为null或关于:空白
我真的不确定如何回答你的问题,但导航无效应该将其更改为
注意:WebBrowser控件是垃圾,你可以尝试另一个WebBrowser控件,如Awesomium或GeckoFX