jvppeteer icon indicating copy to clipboard operation
jvppeteer copied to clipboard

下载pdf的时候,怎么等待页面加载完毕在下载?

Open duan-duan opened this issue 1 year ago • 3 comments

duan-duan avatar Oct 16 '23 09:10 duan-duan

可以监听事件,参考示例: https://github.com/fanyong920/jvppeteer/blob/master/example/src/main/java/com/ruiyun/example/PageEventListenerExample.java

ageovb avatar Nov 16 '23 01:11 ageovb

这个例子感觉好像是给了又好像没有

hanbing5210 avatar Dec 04 '23 08:12 hanbing5210

// 自动下载,第一次下载后不会再下载
        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();

junjiem avatar Apr 23 '24 02:04 junjiem