本文章適合win系統下實驗(linux,mac可能會出現些莫名其妙的bug我也不會解決)
具體過程
- 首先了解什么時無頭瀏覽器
- 啟動無頭瀏覽器
- 打開指定的url頁面
- 設置導出pdf格式
- 開始轉化
- 完整基礎代碼
首先了解什么時無頭瀏覽器
沒有界面的瀏覽器
下載puppeteer
npm i puppeteer
下載中可能會出現文件,中途不要暫停,這個不用管
啟動無頭瀏覽器
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox', '--enable-accelerated-2d-canvas', '--enable-aggressive-domstorage-flushing'],ignoreHTTPSErrors: true,headless: true,timeout: 60000,});
打開指定的url頁面
const page = await browser.newPage();await page.setViewport({width: 640,height: 480,deviceScaleFactor: 1,});//將調整頁面大小。許多網站不希望手機改變大小,因此你應該在導航到頁面之前設置視口。let waitUntil;;waitUntil = 'networkidle0';await page.goto(url, { waitUntil });
waitUntil = 'networkidle0';
這個參數就是當網絡在一定時間內不在請求時開始執行(進入一個網頁肯定會加載相應的js,css文件)
設置導出pdf格式
const options = {//紙張尺寸// format: 'A4',width: '800px',height: '1130px',//打印背景,默認為falseprintBackground: true,//不展示頁眉displayHeaderFooter: true,//頁眉與頁腳樣式,可在此處展示頁碼等headerTemplate: '',footerTemplate: '',path: filePath //指定生成的pdf文件存放路徑};
開始轉化
await page.pdf(options);//關閉頁面page.close();//關閉 chromiumbrowser.close();
完整基礎代碼
直接放在index.js文件里
const puppeteer = require('puppeteer');async function generatePdf(url, filePath) {//啟動無頭瀏覽器const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox', '--enable-accelerated-2d-canvas', '--enable-aggressive-domstorage-flushing'],ignoreHTTPSErrors: true,headless: true,timeout: 60000,}); //PDF 生成僅在無界面模式支持, 調試完記得設為 trueconst page = await browser.newPage();await page.setViewport({width: 640,height: 480,deviceScaleFactor: 1,});//將調整頁面大小。許多網站不希望手機改變大小,因此你應該在導航到頁面之前設置視口。let waitUntil;;waitUntil = 'networkidle0';await page.goto(url, { waitUntil });await page.waitForSelector('.mod-article-content');//等到這個元素出現時開始轉化//導出PDF的格式const options = {//紙張尺寸// format: 'A4',width: '800px',height: '1130px',//打印背景,默認為falseprintBackground: true,//不展示頁眉displayHeaderFooter: true,//頁眉與頁腳樣式,可在此處展示頁碼等headerTemplate: '',footerTemplate: '',path: filePath //指定生成的pdf文件存放路徑};await page.pdf(options);//關閉頁面page.close();//關閉 chromiumbrowser.close();
}
generatePdf('https://cloud.tencent.com/developer/article/1417076', 'a.pdf')
然后啟動node index.js
接著你會發現多了一個a.pdf文件