依赖简介
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
举个例子,如抓取百度搜索结果第二条记录,这个操作的主要流程是这样的:
- 打开 baidu.com 首页
- 在输入框中输入搜索内容
- 点击“百度一下”
- 在新打开的页面中略作等待,待 ajax 渲染完成
- 截图及结果分析
直接上代码:
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 文档
发表回复