3

我正在编写一个使用 Windows 窗体 WebBrowser 控件从网站上抓取数据的程序。

我已经<tr>在一个名为row. 后续代码使用row.FirstChild返回 null。

当我? row在 Visual Studio 即时窗口中运行时,输出包括以下看似矛盾的行。(数据已通过将字母替换为“Z”并将数字替换为 0 进行了清理;空格保持不变;已添加换行符以提高可读性)。

Children: {System.Windows.Forms.HtmlElementCollection}
FirstChild: null
InnerHtml: "\n\t\t<td class=\"rgGroupCol\">&nbsp;</td><td>00000000</td>
           <td>ZZZ 000</td><td>Text Remvd I: Zzzzzzzz Zzzzzzzzz</td><td>0</td>
           <td>Zzzzzzzzz</td><td>Zz</td>
           <td>\n\t\t\t\t\t\t\t00:00 Z 00:00 Z\n\t\t\t\t\t\t</td>
           <td>\n\t\t\t\t\t\t\t0/00/0000 to 00/00/0000\n\t\t\t\t\t\t</td>
           <td>Zzzzz Zzzzzzzz 000</td><td>Zzzzz Z Zzzzzzz</td>\n\t"

在我看来,由于InnerHtml字符串明显存在多个标签,FirstChild因此不应为空。事实上,当我Children在 Locals 窗口中展开属性时,它Count是 11,我可以展开结果视图来查看我期望的各个标签。

该网站的所有者最近对其进行了更新,并引入了许多 HTML 和脚本错误;但是,W3C Validator 不会在页面的这一部分报告任何错误,我也没有看到这些标签有任何问题。我确实ScriptErrorsSuppressed = true设置了我的WebBrowser对象,并且设置HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\MyProg.vshost.exe为 10001。

环境细节:

  • 带有 Windows Media Center 的 Windows 8 Pro 64 位
  • Internet Explorer 10.0.9200.16635
  • 在 .NET 4.5 中使用 C# 5.0 中的 System.Windows.Forms.WebBrowser 控件编译​​为 64 位可执行文件

我在这里想念什么?FirstChild当明显有孩子在场时,怎么可能为空?如果我没有看到的 HTML 有一些问题,我如何在不更改页面(属于其他人的页面)的情况下解决它?

变通方法
面对正在工作的代码,然后突然停止工作,我非常专注于寻找原因,以至于我完全错过了明显的变通方法。第二天晚上它向我跳了出来,就在这里。我只是替换row.FirstChildrow.Children[0],其余代码未更改并成功运行。当然,这并不能解释我所看到的行为,但它确实让我过去了。

4

0 回答 0