电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python基于pyppeteer制作PDF文件

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

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

所謂Headless Chrome 就是 Chrome 瀏覽器的無界面形態。

而 Pyppeteer 就是 Puppeteer 的 Python 版本非官方實現,它是一位來自于日本的工程師依據 Puppeteer 的一些功能開發出來的非官方版本

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

Pyppeteer能做什么

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

生成頁面截圖 生成PDF文件 抓取單頁面應用并生成預先呈現的內容 從網站抓取你需要的內容 自動表單提交,UI測試,鍵盤輸入等 截圖

例如將頁面生成截圖可以直接調用 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())

截圖功能在海報分享等場景用的多,有看過有贊工程師分享的一篇文章,就有用到Puppeteer來做海報分享,性能比Canvas高。

而將網頁轉換為PDF的應用場景更多,比如將網站博客、專欄,或者公眾號文章批量導出PDF,方便離線閱讀,比如我們最近做的一個醫療項目需要將用戶填寫的資料支持PDF形式批量導出,就是用的Pyppeteer

導出PDF

導出pdf直接調用page.pdf方法就可以, 代碼非常簡潔

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())

接下來我們以公眾號文章為例,將html頁面制作成一個PDF文件。

公眾號鏈接導出PDF示例

安裝 pyppeteer

pip install pyppeteer

任意找一篇公眾號的文章鏈接

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()

第一次運行的時候,會自動下載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

執行完成后,我們來預覽下pdf文件

python基于pyppeteer制作PDF文件

和原文鏈接對比,發現文章中的圖片丟失了。

通過分析,原來是頁面源代碼中,img 標簽沒有src屬性,只有個data-src 屬性,默認情況下圖片是無法正常顯示的,圖片之所有能在瀏覽器能正常展示出來,是有個js腳本動態地修改了dom元素為 <img src=’xxxx’>

python基于pyppeteer制作PDF文件

這個網頁使用的是一種叫懶加載的技術展示圖片內容,所謂懶加載就是圖片不會一次全部下載完,而是當前瀏覽到什么位置,就加載該處的圖片,這樣能提高頁面的響應速度,同時減輕服務器性能。

所以,我們也可以通過js代碼模擬真人瀏覽網頁一樣,滾動鼠標,不停地往下滑動,將圖片動態加載出來。

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

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 代碼封裝成一個字符串當作參數傳給 page.evaluate 函數, 該代碼就是獲不斷滾動頁面,直到頁面底部為止。這樣整個頁面的圖片就全部加載出來了。

效果看起來還不錯,和原頁面的樣式是一樣的

python基于pyppeteer制作PDF文件

在Pyppeteer實踐應用過程中,也遇到不少坑,最后都逐個解決了,這可以單獨寫一篇文章,如果你在使用過程中遇到任何問題歡迎與我交流

以上就是python基于pyppeteer制作PDF文件的詳細內容,更多關于python pyppeteer制作PDF文件的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 郑州墨香品牌设计公司|品牌全案VI设计公司| 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 | 上海道勤塑化有限公司 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 酒万铺-酒水招商-酒水代理| 周口风机|周风风机|河南省周口通用风机厂 | 兰州UPS电源,兰州山特UPS-兰州万胜商贸| 冻干机(冷冻干燥机)_小型|实验型|食品真空冷冻干燥机-松源 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 广州网站建设_小程序开发_番禺网站建设_佛山网站建设_粤联网络 | 无锡门窗-系统门窗-阳光房-封阳台-断桥铝门窗厂[窗致美] | 气动绞车,山东气动绞车,气动绞车厂家-烟台博海石油机械有限公司 气动隔膜泵厂家-温州永嘉定远泵阀有限公司 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 天然气分析仪-液化气二甲醚分析仪|传昊仪器 | 刮板输送机,粉尘加湿搅拌机,螺旋输送机,布袋除尘器 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 | 苏州西装定制-西服定制厂家-职业装定制厂家-尺品服饰西装定做公司 | 天一线缆邯郸有限公司_煤矿用电缆厂家_矿用光缆厂家_矿用控制电缆_矿用通信电缆-天一线缆邯郸有限公司 | 天津电机维修|水泵维修-天津晟佳机电设备有限公司 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 陕西华春网络科技股份有限公司| 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 微信小程序定制,广州app公众号商城网站开发公司-广东锋火 | LNG鹤管_内浮盘价格,上装鹤管,装车撬厂家-连云港赛威特机械 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 创富网-B2B网站|供求信息网|b2b平台|专业电子商务网站 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 商标转让-商标注册-商标查询-软著专利服务平台 - 赣江万网 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 |