HtmlUnit 使用

2024-12-30 16:31 阅读

使用HtmlUnit可以模板浏览器访问网站,并且有一定的 js 执行能力,比如 jquery。但由于不支持 vue,使得应用场景大为减少。

引入 jar

<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);
}
QQ咨询
电话
微信
微信扫码咨询