java - 使用 HtmlUnit 启用 JavaScript 的问题
问题描述
我是 HtmlUnit 的新手,我正在编写一个演示脚本来加载网页的源 HTML 并将其写入 txt 文件。
public static void main(String[] args) throws IOException {
try (final WebClient wc = new WebClient(BrowserVersion.BEST_SUPPORTED)) {
wc.getOptions().setThrowExceptionOnScriptError(false);
final HtmlPage page = wc.getPage("https://www.sainsburys.co.uk/gol-ui/SearchResults/biscuits");
WebResponse res = page.getWebResponse();
String html = res.getContentAsString();
FileWriter fw = new FileWriter(dir + "/pageHtml.txt");
fw.write(html);
fw.close();
}
}
但是,它会返回禁用 JavaScript 的 HTML。为了尝试解决这个问题,我添加了这一行以确保在 WebClient 上启用了 JS:
wc.getOptions().setJavaScriptEnabled(true);
尽管如此,什么都没有改变。我是个白痴,还是有一些更微妙的东西需要改变?
谢谢你的帮助!^_^
解决方案
WebResponse res = page.getWebResponse();
String html = res.getContentAsString();
这是您从服务器获得的响应(代码)。如果您想拥有当前的 DOM(js 处理完成后的那个,您可以执行类似的操作
HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(60_000);
System.out.println(page.asXml());
或者
System.out.println(page.asNormalizedText());
推荐阅读
- excel - ActiveX 复选框以隐藏具有特定文本的两行之间的行
- java - 在android studio中使用自定义适配器时出现“java.lang.NullPointerException”错误
- java - 没有这样的表:current_user (code 1) NO CHANGING DATABASE NAME
- r - Summary.factor 中的错误
- sockets - Google 可以存储 ETIMEDOUT 连接问题
- html - 如何使用引导程序或 css 在按钮后的输入中设置文件上传设计
- java - 方法 synchronized ,但由于非序列化线程行为,代码会产生随机结果
- c - 使用相对路径从 lcov 跟踪文件中删除文件
- java - Java 中的 SQL Server 2012 驱动程序
- windows - 如何使用 Free Pascal/Lazarus 运行外部应用程序?