代码之家  ›  专栏  ›  技术社区  ›  Howard

Internet Explorer中的Selenium远程控制HTML源代码提取

  •  2
  • Howard  · 技术社区  · 16 年前

    Selenium远程控制有一个“get_html_source”方法,它将当前页面的源作为字符串返回。

    afaik,这个方法在firefox和safari中的所有情况下都有效。但是当它在InternetExplorer中被调用时,它返回一个不正确的源。

    有人知道这是Selenium还是InternetExplorer的一个bug,还有没有解决方法?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Alana Storm    16 年前

    我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或其他清理程序运行源代码。我不知道有什么能让你在浏览器之间得到一致的渲染。

        2
  •  1
  •   Howard    16 年前

    谢谢艾伦。结果发现这是不同浏览器实现innerHTML的问题。

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

  • ,结束标记是可选的。

    像safari和firefox这样的浏览器使用它们各自的innerHTML方法获取结束标记,但是internet explorer的innerHTML方法忽略了它们。

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

    • 苹果

    html源字符串上的regex替换应该能做到这一点。