分类: Java工具开发

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 文档

Recent Posts

Docker 容器非 root 用户监听 80 端口

起因是基于 CentOS 的 …

1 年 之前

基于 Docker 定时打印文件

先说背景,喷墨打印机有个很大的…

2 年 之前

Java 运行时反射获取来自继承的泛型

背景 正常情况下 Java 的…

2 年 之前

Java 基于 ByteBuddy 重写系统当前时间

背景 一般单元测试时总会有些代…

2 年 之前

华硕 B450F-Gaming 主板 I211-AT 网卡驱动安装

事情起因是买了块华硕的 ROG…

3 年 之前

PHP 安装 Memcached 扩展

登录服务器挨步执行: # su…

3 年 之前