0

我正在尝试使用 CSQuery 解析网站的 DOM。如果我在 IE 中打开一个站点并检查一个元素,它的 HTML 与使用 CSQuery.CreateFromUrl 方法加载的同一站点略有不同(属性的顺序和值之间的间距)。例如IE生成的div样式为“style=margin-bottom: 0.5em;” 对于相同的 div,CSQuery 的 Render 方法生成了不同的 HTML "style=margin-bottom:0.5em;" [ :] 后没有空格。

结果,当我为“div [style ='margin-left:0.5em;']”创建CSQuery选择器时,它不起作用,因为CSQuery的内部DOM在':'和'0.5'之间没有空格。

我的问题是我的应用程序用户将使用 IE 来检查 DOM 元素,因此创建 CSS 选择器来使用 CSQuery 查询 DOM。对于这种情况,我可以从代码中的选择器中删除空格,但我不想这样做,因为其他选择器之间可能存在一些其他细微差别。

那么有什么方法可以确保 CSQuery 生成与 IE 相同的 DOM 吗?我尝试过使用 CSQuery.Creat( HTML return by IE ),但不知何故 CSQuery 仍然以不同于 IE DOM 的方式格式化 HTML。

谢谢,托尼

4

2 回答 2

0
  1. 为确保您在 CsQuery 对象中获得与在 IE 浏览器中相同的响应,应关闭浏览器中的 javascript 并且不接受来自网站的 cookie。(CQ.CreateFromURL 返回一个没有被 javascript 使用的渲染 DOM)。此外,有时会有一个由 cookie 连接的响应延迟。

在您的情况下,您只需要设置一个“解析方法”。

查看官方文档

查找“从 HTML 创建”部分。

祝你好运。

于 2014-01-25T04:43:19.020 回答
0

问题既不是 IE 也不是 CsQuery,两者都按设计工作。问题是您期望来自两个不同的解析引擎的相同输出。据我所知,IE 使用 mshtml,而 CsQuery 正在模拟 Firefox 使用的 Gecko。因此,要获得相同的输出,您需要切换到 mshtml 或让您的用户使用 firefox。您选择的组合将有多种差异,因为解析原理略有不同,并且它显示在您看到的这些异常中。

于 2014-04-05T12:57:35.697 回答