日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python基于pyppeteer制作PDF文件

瀏覽:26日期:2022-06-25 09:57:25
Pyppeteer 是什么

介紹 Pyppeteer 之前,有必要先介紹一下 Puppeteer,Puppeteer 是谷歌官方出的一個(gè)通過(guò)DevTools協(xié)議控制headless Chrome的Node庫(kù)。通過(guò)Puppeteer可以直接控制Chrome瀏覽器模擬大部分用戶操作。

所謂Headless Chrome 就是 Chrome 瀏覽器的無(wú)界面形態(tài)。

而 Pyppeteer 就是 Puppeteer 的 Python 版本非官方實(shí)現(xiàn),它是一位來(lái)自于日本的工程師依據(jù) Puppeteer 的一些功能開發(fā)出來(lái)的非官方版本

Pyppeteer 采用了 Python 的 async 機(jī)制,需要Python3.5 及以上版本才支持。

Pyppeteer能做什么

但凡是需要通過(guò)Chrome瀏覽器手動(dòng)完成的操作都可以通過(guò) Pyppeteer 自動(dòng)完成,例如:

生成頁(yè)面截圖 生成PDF文件 抓取單頁(yè)面應(yīng)用并生成預(yù)先呈現(xiàn)的內(nèi)容 從網(wǎng)站抓取你需要的內(nèi)容 自動(dòng)表單提交,UI測(cè)試,鍵盤輸入等 截圖

例如將頁(yè)面生成截圖可以直接調(diào)用 page.screenshot 方法

import asynciofrom pyppeteer import launchasync def main(): browser = await launch() page = await browser.newPage() await page.goto(’https://foofish.net’) await page.screenshot({’path’: ’example.png’}) await browser.close()asyncio.get_event_loop().run_until_complete(main())

截圖功能在海報(bào)分享等場(chǎng)景用的多,有看過(guò)有贊工程師分享的一篇文章,就有用到Puppeteer來(lái)做海報(bào)分享,性能比Canvas高。

而將網(wǎng)頁(yè)轉(zhuǎn)換為PDF的應(yīng)用場(chǎng)景更多,比如將網(wǎng)站博客、專欄,或者公眾號(hào)文章批量導(dǎo)出PDF,方便離線閱讀,比如我們最近做的一個(gè)醫(yī)療項(xiàng)目需要將用戶填寫的資料支持PDF形式批量導(dǎo)出,就是用的Pyppeteer

導(dǎo)出PDF

導(dǎo)出pdf直接調(diào)用page.pdf方法就可以, 代碼非常簡(jiǎn)潔

import asynciofrom pyppeteer import launchasync def main(): browser = await launch() page = await browser.newPage() await page.goto(’https://foofish.net’) await page.pdf({ 'path': 'example.pdf', 'format': ’A4’}) await browser.close()asyncio.get_event_loop().run_until_complete(main())

接下來(lái)我們以公眾號(hào)文章為例,將html頁(yè)面制作成一個(gè)PDF文件。

公眾號(hào)鏈接導(dǎo)出PDF示例

安裝 pyppeteer

pip install pyppeteer

任意找一篇公眾號(hào)的文章鏈接

url = 'https://mp.weixin.qq.com/s/6VBXs19icV0O5hT7cHYwgw'

完成代碼:

browser = await launch( options={’headless’: True, ’args’: [’--no-sandbox’, ’?disable-gpu’, ’?disable-dev-shm-usage’, ’?disable-setuid-sandbox’, ’?no-first-run’, ’?no-zygote’, ’?single-process’ ]}, ) page = await browser.newPage() url = 'https://mp.weixin.qq.com/s/6VBXs19icV0O5hT7cHYwgw' await page.goto(url) file_name = 'test.pdf' await page.pdf({'path': file_name, 'format': ’A4’}) await browser.close()

第一次運(yùn)行的時(shí)候,會(huì)自動(dòng)下載chromium瀏覽器,chromium是chrome的開源版本, 需要幾分鐘才能下載完

[W:pyppeteer.chromium_downloader] start chromium download.Download may take a few minutes.100%|??????????| 127496521/127496521 [00:20<00:00, 6268578.80it/s][W:pyppeteer.chromium_downloader] chromium download done.[W:pyppeteer.chromium_downloader] chromium extracted to: C:UserslzjunAppDataLocalpyppeteerpyppeteerlocal-chromium575458

執(zhí)行完成后,我們來(lái)預(yù)覽下pdf文件

python基于pyppeteer制作PDF文件

和原文鏈接對(duì)比,發(fā)現(xiàn)文章中的圖片丟失了。

通過(guò)分析,原來(lái)是頁(yè)面源代碼中,img 標(biāo)簽沒有src屬性,只有個(gè)data-src 屬性,默認(rèn)情況下圖片是無(wú)法正常顯示的,圖片之所有能在瀏覽器能正常展示出來(lái),是有個(gè)js腳本動(dòng)態(tài)地修改了dom元素為 <img src=’xxxx’>

python基于pyppeteer制作PDF文件

這個(gè)網(wǎng)頁(yè)使用的是一種叫懶加載的技術(shù)展示圖片內(nèi)容,所謂懶加載就是圖片不會(huì)一次全部下載完,而是當(dāng)前瀏覽到什么位置,就加載該處的圖片,這樣能提高頁(yè)面的響應(yīng)速度,同時(shí)減輕服務(wù)器性能。

所以,我們也可以通過(guò)js代碼模擬真人瀏覽網(wǎng)頁(yè)一樣,滾動(dòng)鼠標(biāo),不停地往下滑動(dòng),將圖片動(dòng)態(tài)加載出來(lái)。

最后,完整代碼就變成了這樣:

async def main(): browser = await launch() page = await browser.newPage() url = 'https://mp.weixin.qq.com/s/6VBXs19icV0O5hT7cHYwgw' await page.goto(url) await page.evaluate(’’’async () => { await newPromise((resolve, reject) => { vartotalHeight = 0;vardistance = 100;vartimer = setInterval(() => { varscrollHeight = document.body.scrollHeight;window.scrollBy(0, distance);totalHeight += distance;if (totalHeight >= scrollHeight){clearInterval(timer);resolve();}}, 100);});}’’’) await page.pdf({'path': 'test.pdf', 'format': ’A4’}) await browser.close()if __name__ == ’__main__’: asyncio.get_event_loop().run_until_complete(main())

將js 代碼封裝成一個(gè)字符串當(dāng)作參數(shù)傳給 page.evaluate 函數(shù), 該代碼就是獲不斷滾動(dòng)頁(yè)面,直到頁(yè)面底部為止。這樣整個(gè)頁(yè)面的圖片就全部加載出來(lái)了。

效果看起來(lái)還不錯(cuò),和原頁(yè)面的樣式是一樣的

python基于pyppeteer制作PDF文件

在Pyppeteer實(shí)踐應(yīng)用過(guò)程中,也遇到不少坑,最后都逐個(gè)解決了,這可以單獨(dú)寫一篇文章,如果你在使用過(guò)程中遇到任何問(wèn)題歡迎與我交流

以上就是python基于pyppeteer制作PDF文件的詳細(xì)內(nèi)容,更多關(guān)于python pyppeteer制作PDF文件的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99国产精品99久久久久久粉嫩| 欧美国产亚洲精品| 悠悠资源网久久精品| 久久久天天操| 日韩一区精品视频| 国产亚洲久久| 最新国产精品| 日本一二区不卡| 日韩理论片av| 激情综合网站| 免费视频久久| 午夜天堂精品久久久久| 欧美日韩99| 国产一区二区三区久久 | 国产精品porn| 美女视频黄免费的久久| 91亚洲自偷观看高清| 精精国产xxxx视频在线野外| 在线日韩中文| 男女激情视频一区| 日韩不卡一区二区| 精品国产一区二| 久久蜜桃精品| 蜜桃一区二区三区在线观看 | 蜜臀久久99精品久久久久久9| 亚洲三级在线| 国产精品啊v在线| 欧美韩日一区| 国产真实久久| 亚洲天堂免费| 老司机精品视频在线播放| 久久精品影视| 婷婷综合成人| 荡女精品导航| 女同性一区二区三区人了人一| 日韩专区一卡二卡| 国产精品久久久久毛片大屁完整版| 国产一区调教| 99成人在线| 国产极品嫩模在线观看91精品| 91视频一区| 欧美一级专区| 久久精品免视看国产成人| 久久精品不卡| 日韩福利视频导航| 日韩理论视频| 亚洲色图网站| 国产一区二区三区不卡av| 伊人影院久久| 国产精品白丝一区二区三区| 亚洲调教视频在线观看| 欧美一区免费| 九一成人免费视频| 国产精品一页| 自拍日韩欧美| 久久精品国内一区二区三区| 中文一区二区| 久久99免费视频| 亚洲中字黄色| 国产成人精品亚洲线观看 | 欧美天堂在线| 日韩一区欧美二区| 美女少妇全过程你懂的久久| 国模精品一区| 国产精品白丝一区二区三区| 日韩中文字幕在线一区| 国产精品外国| 国产一区日韩一区| 日韩精品看片| 国产精品国产一区| 久久精品网址| 精品免费在线| 欧美精品二区| 国产乱人伦丫前精品视频 | 日本在线一区二区三区| 欧美中文日韩| 性色av一区二区怡红| 欧美69视频| 99久久夜色精品国产亚洲1000部| 日韩av在线中文字幕| 久久xxx视频| 国产亚洲精品美女久久久久久久久久| 蜜臀久久99精品久久久久久9| 亚洲深夜影院| 免费视频亚洲| 亚洲一级特黄| 国内亚洲精品| 欧美午夜精彩| 久久国产中文字幕| 伊人精品一区| 国产一区观看| 亚洲精品va| 日韩视频一区二区三区在线播放免费观看| 成人羞羞在线观看网站| 久久精品亚洲欧美日韩精品中文字幕| 91精品久久久久久久久久不卡| 91看片一区| 91精品蜜臀一区二区三区在线| 亚洲福利久久| 日韩亚洲国产欧美| 999在线观看精品免费不卡网站| 夜夜嗨一区二区| 亚洲自啪免费| 亚洲精品在线二区| 久久国产日韩欧美精品| 国产精品久久乐| 精品一区二区三区中文字幕视频 | 蜜桃91丨九色丨蝌蚪91桃色| 亚洲天堂av资源在线观看| 石原莉奈在线亚洲二区| 视频一区日韩精品| 欧美日韩一区二区高清| 欧美黄色一区二区| 黄色网一区二区| 人人精品亚洲| 亚洲综合另类| 亚洲精品在线a| 久久av导航| 日韩一区二区在线免费| 欧美日韩国产一区二区三区不卡 | 国产精品一区二区免费福利视频| 免费看一区二区三区| 中文字幕在线免费观看视频| 国产精品久久久久av电视剧| 欧美一区二区三区高清视频 | 国产日韩精品视频一区二区三区| 免费在线亚洲欧美| 精品欧美一区二区三区在线观看| 婷婷激情综合| 日韩中文av| 精品不卡一区| 亚州av乱码久久精品蜜桃| 一区二区不卡| 久久精品一区二区国产| 999国产精品| 国产午夜精品一区二区三区欧美 | 中文欧美日韩| 国产免费久久| 亚洲午夜久久久久久尤物| 亚洲精品婷婷| 国产成人久久精品麻豆二区| 好看的av在线不卡观看| 日本午夜精品一区二区三区电影| 麻豆精品视频在线| 久久精品观看| 日韩不卡一区二区| 日本在线高清| 亚洲精品麻豆| 色综合五月天| 日韩精品一级中文字幕精品视频免费观看| 国产日韩欧美高清免费| 久久国产精品成人免费观看的软件| 一区二区不卡| 日本蜜桃在线观看视频| 香蕉久久久久久| 日韩理论视频| 欧美亚洲tv| 免费黄色成人| 久久久久伊人| 老牛影视一区二区三区| 精品视频久久| 模特精品在线| 韩日一区二区| 亚洲一二av| 麻豆精品蜜桃| 国产麻豆一区| 久久电影一区| 国产一区二区三区四区| 综合在线一区| 91精品亚洲| 老司机精品视频在线播放| 国产麻豆综合| 青青青免费在线视频| 欧美一区二区三区久久精品| 欧美不卡高清| 精品一区二区三区中文字幕视频| 老色鬼久久亚洲一区二区| 最新中文字幕在线播放 | 欧美国产一级| 久久国产精品色av免费看| 欧美日韩视频一区二区三区| 精品中文字幕一区二区三区 | 青青草国产成人99久久| 国产伊人精品| 中国字幕a在线看韩国电影| 久久国产欧美日韩精品| 亚洲免费影视| 伊人久久在线| 麻豆高清免费国产一区| 亚州av日韩av| 欧美特黄一区| 久久精品欧美一区| 水蜜桃久久夜色精品一区| 国产九九精品| 日韩中文一区二区| 男女男精品视频网| 狠狠干成人综合网| 久久激情网站| 一区二区精品伦理...| 麻豆久久久久久|