2

Selenium Remote Control 有一个“get_html_source”方法,它以字符串的形式返回当前页面的源。

AFAIK,此方法适用于 Firefox 和 Safari 的所有情况。但是当它在 Internet Explorer 中调用时,它会返回一个不正确的源。

有谁知道这是否是 Selenium 或 Internet Explorer 的错误,是否有修复?

4

2 回答 2

2

我 99% 确定 get_html_source 使用浏览器的 innerHTML 属性。InnerHTML 返回浏览器对文档的内部表示,并且在平台之间总是不一致和“不稳定”。

您可以通过临时将以下 onload 属性添加到页面的 body 标记来测试这一点。

onload="var oArea = document.createElement('textarea');oArea.rows=80;oArea.cols=80;oArea.value = document.getElementsByTagName('html')[0].innerHTML;document.getElementsByTagName('body')[0].appendChild(oArea)"

这将使用文档的 innerHTML 在页面底部添加一个文本区域。如果您看到相同的“不正确”HTML 源代码,您就知道 IE 是这里的罪魁祸首。

如果您使用有效标记,可能的解决方法是通过 HTML Tidy 或其他一些清洁器运行源代码。我不知道有什么可以在浏览器之间为您提供一致的渲染。

于 2008-09-24T04:03:27.597 回答
1

谢谢艾伦。事实证明,这是不同浏览器实现 innerHTML 的问题。

对于与列表有关的标签,例如

  • , 结束标签是可选的。

    safari 和 firefox 等浏览器使用各自的 innerHTML 方法获取结束标记,但 Internet Explorer 的 innerHTML 方法会忽略它们。

    因为列表是结构化的,例如

    • 苹果

    html 源字符串上的正则表达式替换应该可以解决问题。

  • 于 2008-09-26T19:37:31.210 回答