jvppeteer
jvppeteer copied to clipboard
下载pdf的时候,怎么等待页面加载完毕在下载?
可以监听事件,参考示例: https://github.com/fanyong920/jvppeteer/blob/master/example/src/main/java/com/ruiyun/example/PageEventListenerExample.java
这个例子感觉好像是给了又好像没有
// 自动下载,第一次下载后不会再下载
BrowserFetcher.downloadIfNotExist(null);
ArrayList<String> 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();
// 等待页面基本元素加载完之后再向后执行,以防止网络图片加载不了或加载不全
PageNavigateOptions navigateOptions = new PageNavigateOptions();
navigateOptions.setTimeout((int) Duration.ofSeconds(60).toMillis());
navigateOptions.setWaitUntil(Arrays.asList(
"load", // 等待 “load” 事件触发
// "domcontentloaded", // 等待 “domcontentloaded” 事件触发
"networkidle0", // 在 500ms 内没有任何网络连接
"networkidle2" // 在 500ms 内网络连接个数不超过 2 个
));
if (page.goTo(url, navigateOptions).ok()) {
// 逐步滚动直到页面底部的方法
page.evaluate("async () => {\n" +
" await new Promise((resolve, reject) => {\n" +
" let totalHeight = 0;\n" +
" const distance = 100;\n" +
" const timer = setInterval(() => {\n" +
" const scrollHeight = document.body.scrollHeight;\n" +
" window.scrollBy(0, distance);\n" +
" totalHeight += distance;\n" +
" if (totalHeight >= scrollHeight) {\n" +
" clearInterval(timer);\n" +
" resolve();\n" +
" }\n" +
" }, 100);\n" +
" });\n" +
"}");
// 确保滚动完成
page.waitFor("1000");
// 生成PDF并下载
PDFOptions pdfOptions = new PDFOptions();
pdfOptions.setPrintBackground(true);
pdfOptions.setPath("test.pdf");
page.pdf(pdfOptions);
}
page.close();
browser.close();