C# WebBrowser 无法展开所有 HtmlElements

标签 c# html web-crawler webbrowser-control htmlelements

我在抓取网页时遇到问题,因为 C# webClient 类和 webBrowser 类无法检索 Html 源中的所有子元素。

当我从 Chrome 甚至 iExplorer 中搜索代码时,我可以展开所有 HtmlElement 节点,但如果我尝试从代码中展开所有这些元素,我将无法获取所有节点。

我正在使用这个例程来获取节点:

string page = ConfigurationManager.AppSettings["url"];
webBrowser1.Navigate(page);
string directory = Directory.GetCurrentDirectory();
StreamReader myReader = new StreamReader(webBrowser1.DocumentStream);
StreamWriter myWriter = new StreamWriter(directory + @"\pageSource.txt");
while (myReader.Peek() >= 0)
{
     myWriter.WriteLine(myReader.ReadLine());
}
myWriter.Close();
myReader.Close();

文件 pageSource.txt 不包含原始 html 源中的所有行。

例如,这是pageSource.txt的内容:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<noscript>
<meta HTTP-EQUIV="REFRESH" CONTENT="0;URL=index.jsp?noscript=1">
</noscript>
<title>Page</title>

</head>

<frameset id="indexFramst" onload="onloadHandler()" rows="135,24,*"  frameborder="0" framespacing="0" border=0 spacing=0>

    <frame name="Banner" title="Banner" src='banner.html'  tabIndex="3" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" noresize=0>
    <frame name="Search" title="Toolbar" src='archive=100' marginwidth="0" marginheight="0" scrolling="no" frameborder="0" noresize=0>
    <frame name="Bingo" title="BINGO" src='bingo.Html' marginwidth="0" marginheight="0" scrolling="no" frameborder="0" >
</frameset>
</html>

每个<frame>标记必须有结束项和子项,但 webBrowser1 的文档不会检索此子项。

原始页面包含在每个框架标签<html>带有另一个嵌套 html 文档的标签。

如果有人知道我为什么无法检索这些节点,我将非常感谢您的提示。

最佳答案

看起来框架集是 not supported in html 5 .也许 webbrowser 类默认为 html5,即使该页面将自己标识为 html 4。您可以尝试使用另一个客户端来下载和处理文本。如果你需要渲染的 javascript 试试 phantomjs 或者如果你固定在 c# 上,你可以试试 AbotX它在内部使用 phantomjs。

关于C# WebBrowser 无法展开所有 HtmlElements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34364670/

相关文章:

c# - 使用 mDNS 在 C# 中查找本地设备的 IP 地址

c# - 方法地址会被垃圾收集器移动吗?

javascript - jQuery/JavaScript 替换损坏的图像

c# - 以编程方式将单元格和行添加到 DataGridView

javascript - 在字段模糊/焦点丢失时使用 jQuery 更新表单字段的错误样式

html - Kendo 复选框切换 true 和 false 状态不能正常工作

python - Beautifulsoup 从 Google 专利搜索下载所有 .zip 文件

seo - 如何请求谷歌重新抓取一个网址(没有谷歌获取)

seo - 如何知道 HTTP 请求是否是 BOT

c# - 从 asp.net 背后的代码检查复选框