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