首页 > 解决方案 > 如何在 java 中使用 selenium 获取页面的常规(!)源代码?

问题描述

好的,事情是这样的:你们所有人可能都在想同样的事情:你可以使用

driver.getPageSource();

这是部分正确的。唯一的问题是源代码以一种相当奇怪的方式编译

\"

开始出现。我尝试手动删除它,但仍然不能完全解决问题。

我的意思的一个例子:

正常源代码:

\"query_title\":null}",encoded_title:"WyJoZW5rIl0",ref:"unknown",logger_source:"www_main",typeahead_sid:"",tl_log:false,impression_id:"bbdb1882",filter_ids:

硒输出:

\\\"query_title\\\":null}\",\"encoded_title\":\"WyJoZW5rIl0\",\"ref\":\"br_tf\",\"logger_source\":\"www_main\",\"typeahead_sid\":\"0.6583900225217523\",\"tl_log\":false,\"impression_id\":\"e00060b4\",\"filter_ids\"

这似乎与您必须在某些符号前面加上引号以阻止 java 将其视为这些符号之一的地方相同,但我并不完全理解这种行为,也不知道如何解决它...希望您能提供帮助:)

编辑:替换不起作用,因为它的编译方式。为什么它不起作用的一个例子实际上是在我之前包含的例子中:

原来的:

}",encoded_title:

编译版本:

}\",\"encoded_title\":

将 \" 替换为 " 会将其更改为:

}","encoded_title":

这和原来的不一样...

如果我要替换 \" 什么都没有,我会得到:

},encoded_title:

遗憾的是,它仍然与原始版本不同。这种编译方式我只是不认为替换是一个可行的选择......

标签: javaselenium

解决方案


您可以使用 javascript 使用 outerHTML 或 innerHTML 获取 html(如何从页面获取 HTML 源代码?):

((JavascriptExecutor) driver).executeScript("return document.documentElement.outerHTML;")
((JavascriptExecutor) driver).executeScript("return document.documentElement.outerHTML;")
((JavascriptExecutor) driver).executeScript("return document.all[0].outerHTML")
((JavascriptExecutor) driver).executeScript("return new XMLSerializer().serializeToString(document);")

推荐阅读