使用HtmlUnit
可以模板浏览器访问网站,并且有一定的 js 执行能力,比如 jquery。但由于不支持 vue,使得应用场景大为减少。
<dependency>
<groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>4.7.0</version>
</dependency>
try(WebClient client = new WebClient(BrowserVersion.CHROME);) {
System.out.println("******UserAgent: " + client.getBrowserVersion().getUserAgent());
// 支持 Ajax
client.setAjaxController(new NicelyResynchronizingAjaxController());
// 支持 JavaScript
client.getOptions().setJavaScriptEnabled(true);
// 不支持 CSS
client.getOptions().setCssEnabled(false);
// 脚本错误时 Java 程序不抛出异常
client.getOptions().setThrowExceptionOnScriptError(false);
// 出现失败状态时 Java 程序不抛出异常
client.getOptions().setThrowExceptionOnFailingStatusCode(false);
client.getOptions().setDoNotTrackEnabled(false);
HtmlPage page = client.getPage("https://www.example.com/");
// 等待后台执行的 JavaScript
client.waitForBackgroundJavaScript(20_000);
// 后台执行 JavaScript 前,先等待一段时间
client.waitForBackgroundJavaScriptStartingBefore(2_000);
Set<Cookie> cookies = client.getCookieManager().getCookies();
for (Cookie cookie : cookies) {
System.out.println("*****Cookie: " + cookie);
}
System.out.println("****PageTitle: " + page.getTitleText());
String pageXml = page.asXml();
System.out.println("******PageSourceBegin");
System.out.println(pageXml);
System.out.println("******PageSourceEnd");
// Respect the website's crawl-delay
// Adjust the delay as needed
Thread.sleep(1000);
}