浏览器抓取网页(Jvppeteer本库的灵感来自Puppeteer(Node.js)API)
优采云 发布时间: 2021-09-18 05:07浏览器抓取网页(Jvppeteer本库的灵感来自Puppeteer(Node.js)API)
jvppeter
这个库的灵感来源于puppeter(node.JS),API与它基本一致。此库用于方便使用Java操作chrome或chrome
JVMPeter通过devtools控制铬或铬。默认情况下,它在无头模式下运行,或通过配置在“无头”模式下运行
您可以在浏览器中手动执行的大多数操作都可以使用JVMPeter完成!以下是一些例子:
首先,这里是使用依赖关系管理工具(如Maven或gradle)的简要指南。马文
要使用maven,请将此依赖项添加到pom.xml文件:
io.github.fanyong920
jvppeteer
1.1.3
格拉德尔
要使用gradle,请将Maven中央存储库添加到存储库列表中:
mavenCentral()
然后可以将最新版本添加到生成中
compile "io.github.fanyong920:jvppeteer:1.1.3"
伐木
该库使用slf4j进行日志记录,没有任何默认日志记录实现
调试器将日志级别设置为跟踪
独立罐
如果不使用任何依赖项管理工具,可以在此处找到最新的独立JAR
快速启动1、浏览器
//设置基本的启动配置,这里选择了‘有头’模式启动
ArrayList argList = new ArrayList();
//自动下载,第一次下载后不会再下载
BrowserFetcher.downloadIfNotExist(null);
LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(false).build();
argList.add("--no-sandbox");
argList.add("--disable-setuid-sandbox");
Puppeteer.launch(options);
在本例中,如果指定启动路径,程序将根据指定路径启动相应的浏览器。如果未指定路径,程序将尝试在默认安装路径下启动Chrome浏览器
2、导航到一个页面
//自动下载,第一次下载后不会再下载
BrowserFetcher.downloadIfNotExist(null);
ArrayList argList = new ArrayList();
LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(false).build();
argList.add("--no-sandbox");
argList.add("--disable-setuid-sandbox");
Browser browser = Puppeteer.launch(options);
Browser browser2 = Puppeteer.launch(options);
Page page = browser.newPage();
page.goTo("https://www.taobao.com/about/");
browser.close();
Page page1 = browser2.newPage();
page1.goTo("https://www.taobao.com/about/");
在本例中,浏览器导航到特定页面并关闭。此处未指明启动路径。Arglist放置一些额外的命令行启动参数。我将在下面的参考资料部分提供相关信息
3、生成页面的PDF
//自动下载,第一次下载后不会再下载
BrowserFetcher.downloadIfNotExist(null);
ArrayList arrayList = new ArrayList();
//生成pdf必须在无厘头模式下才能生效
LaunchOptions options = new LaunchOptionsBuilder().withArgs(arrayList).withHeadless(true).build();
arrayList.add("--no-sandbox");
arrayList.add("--disable-setuid-sandbox");
Browser browser = Puppeteer.launch(options);
Page page = browser.newPage();
page.goTo("https://www.baidu.com/?tn=98012088_10_dg&ch=3");
PDFOptions pdfOptions = new PDFOptions();
pdfOptions.setPath("test.pdf");
page.pdf(pdfOptions);
page.close();
browser.close();
在本例中,导航到某个页面后,拍摄整个页面的屏幕截图,并将其作为PDF文件写入。请注意,生成的PDF必须处于headless模式才能生效
4、TRACING性能分析
//自动下载,第一次下载后不会再下载
BrowserFetcher.downloadIfNotExist(null);
ArrayList argList = new ArrayList();
LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(true).build();
argList.add("--no-sandbox");
argList.add("--disable-setuid-sandbox");
Browser browser = Puppeteer.launch(options);
Page page = browser.newPage();
//开启追踪
page.tracing().start("C:\\Users\\howay\\Desktop\\trace.json");
page.goTo("https://www.baidu.com/?tn=98012088_10_dg&ch=3");
page.tracing().stop();
在本例中,页面导航完成后将生成一个JSON文件,其中收录页面性能的特定数据。您可以使用Chrome浏览器开发工具打开JSON文件并分析性能
5、页面截图
BrowserFetcher.downloadIfNotExist(null);
ArrayList arrayList = new ArrayList();
LaunchOptions options = new LaunchOptionsBuilder().withArgs(arrayList).withHeadless(true).build();
arrayList.add("--no-sandbox");
arrayList.add("--disable-setuid-sandbox");
Browser browser = Puppeteer.launch(options);
Page page = browser.newPage();
page.goTo("https://www.baidu.com/?tn=98012088_10_dg&ch=3");
ScreenshotOptions screenshotOptions = new ScreenshotOptions();
//设置截图范围
Clip clip = new Clip(1.0,1.56,400,400);
screenshotOptions.setClip(clip);
//设置存放的路径
screenshotOptions.setPath("test.png");
page.screenshot(screenshotOptions);
页面导航完成后,设置屏幕截图范围和图像保存路径以启动屏幕截图
更多示例请参见此处
资源devtools protocolchrome命令行启动参数
在此存储库中找到的所有内容都是Apache许可的。有关详细信息,请参阅许可证文件