Selenium Remote Control 有一个“get_html_source”方法,它以字符串的形式返回当前页面的源。
AFAIK,此方法适用于 Firefox 和 Safari 的所有情况。但是当它在 Internet Explorer 中调用时,它会返回一个不正确的源。
有谁知道这是否是 Selenium 或 Internet Explorer 的错误,是否有修复?
我 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 或其他一些清洁器运行源代码。我不知道有什么可以在浏览器之间为您提供一致的渲染。
谢谢艾伦。事实证明,这是不同浏览器实现 innerHTML 的问题。
对于与列表有关的标签,例如
safari 和 firefox 等浏览器使用各自的 innerHTML 方法获取结束标记,但 Internet Explorer 的 innerHTML 方法会忽略它们。
因为列表是结构化的,例如
html 源字符串上的正则表达式替换应该可以解决问题。