我正在使用循环来遍历搜索引擎页面来收集数据,出于某种原因,当我导航到结果的第二页时,我的HtmlElementCollection和Regex.Match函数出现了这个错误:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
这是我的循环代码的副本。你能告诉我如何继续以及可能导致这个问题的原因吗?
while (((WebBrowser)browser).Document.GetElementById("pg-next")!=null)
{
//MessageBox.Show("hello");
HtmlElementCollection col = default(HtmlElementCollection);
col = ((WebBrowser)browser).Document.GetElementsByTagName("a");
foreach (HtmlElement e in col)
{
match = Regex.Match(e.GetAttribute("href").ToString(), @"mysite.com", RegexOptions.IgnoreCase);
if (match.Success)
{
this_url = e.GetAttribute("href").ToString();
//MessageBox.Show(this_url);
match = Regex.Match(this_url, @"mysite.com", RegexOptions.IgnoreCase);
this_url = "https://"+match;
//domorestuff
}
if ((e.GetAttribute("innerHTML").ToString().Contains("Next ")))
{
f_perform_operation_on_element (e, "click", null);
f_sleep(2);
}
}
}
我目前唯一的领先优势,也可能是完全错误的,因为htmlelementcollection期望拥有以前的页面元素,但是因为我宣布一个全新的集合,所以有些东西搞砸了。我真的很困惑。
拒绝访问:
match = Regex.Match(e.GetAttribute("href").ToString(), @"mysite.com", RegexOptions.IgnoreCase);
答案 0 :(得分:1)
我认为这是e.GetAttribute抛出异常...
两件事......首先,确保您在管理员等完全信任帐户下运行应用程序,然后考虑使用htmlagilitypack在html结构上执行操作:
答案 1 :(得分:0)
我的回答是,请注意循环有一个元素,如果碰巧是下一个按钮,它会点击它。好了循环继续但是已经加载了一个新页面,并且页面元素循环中的这个突然的页面更改导致了错误。所以我在点击后停止了循环。
答案 2 :(得分:0)
发生此错误的原因是正在循环的某些 HTML 元素在代码中不包含请求的属性。
例如,您可能会在某些 HTML 代码中遍历 FONT 标记,并检查每个标记的 COLOR 属性是否包含 BLUE。一旦循环遇到不包含请求的属性 (BLUE) 的元素,就会发生错误。
要绕过这个,您可以尝试以下两种解决方案:
我强烈建议第一个解决方案。