我正在从事一个小型自动化项目,但已经碰壁了。首先,我想说明我在项目的这个组件中使用 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 慢得多,而且事实证明在运行中进行更改很痛苦
问候
巴里