jBrowserDriver + aShot 实现网页后台截屏

依赖简介

jBrowserDriver 是一个纯 Java 的基于 WebKit 的无图形化嵌入式浏览器,可以用于 Web 页面的流程自动化,网页爬虫、页面测试等各种场景。

aShot 是一个功能强大的跨平台 WebDriver 截图工具,详细功能可以参考 GitHub。

Maven 依赖

<dependency>
  <groupId>com.machinepublishers</groupId>
  <artifactId>jbrowserdriver</artifactId>
  <version>1.0.0-RC1</version>
</dependency>
<dependency>
    <groupId>ru.yandex.qatools.ashot</groupId>
    <artifactId>ashot</artifactId>
    <version>1.5.2</version>
</dependency>

Example

举个例子,如抓取百度搜索结果第二条记录,这个操作的主要流程是这样的:

  1. 打开 baidu.com 首页
  2. 在输入框中输入搜索内容
  3. 点击“百度一下”
  4. 在新打开的页面中略作等待,待 ajax 渲染完成
  5. 截图及结果分析

直接上代码:

public class BaiduScratcher {
    public static void main(String[] args) throws IOException {

        JBrowserDriver driver = new JBrowserDriver(Settings.builder().timezone(Timezone.ASIA_SHANGHAI).build());

        // 打开页面
        driver.get("https://www.baidu.com/");
        // 找到输入框,并输入,findElement 是一系列方法,为了方便此处使用 Xpath
        driver.findElementByXPath("//*[@id=\"kw\"]").sendKeys("Google");
        // 找到“百度一下”按钮并点击
        driver.findElementByXPath("//*[@id=\"su\"]").click();
        // 因为此页面内容是 ajax 加载的,等 JS 执行完成
        driver.pageWait();

        // 截第二条数据
        ImageIO.write(
                new AShot().coordsProvider(new WebDriverCoordsProvider())
                        .takeScreenshot(driver, driver.findElementByXPath("//*[@id=\"2\"]")).getImage(),
                "png", new File("E:\\1.png"));

        // 输出第三条数据内容
        System.out.println(driver.findElementByXPath("//*[@id=\"3\"]").getText());
        driver.quit();
    }
}

All Done!

如果有其它需求直接参照 GitHub 上的 README 文档

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注