page contents

用Python把网页转成PDF,这3种方法对比,最后一种最省心

我今天就跟你聊聊,怎么用Python把网页转成PDF。我试过3种方法,踩了不少坑,现在把经验分享给你。

attachments-2026-06-qrOw0jKo6a2b63c00676d.png你有没有遇到过这种场景。看到一个不错的网页教程,想保存下来慢慢看。复制粘贴太慢,截图又不清晰。用浏览器自带的打印功能,排版经常乱掉。

我今天就跟你聊聊,怎么用Python把网页转成PDF。我试过3种方法,踩了不少坑,现在把经验分享给你。

第一种方法,用pdfkit。这个库包装了wkhtmltopdf。你得先安装wkhtmltopdf这个软件,再装pdfkit的Python包。写代码很简单。

import pdfkit
 pdfkit.from_url('https://example.com', 'output.pdf')

但问题来了。很多现代网页用了JavaScript动态加载内容,wkhtmltopdf不会执行这些脚本。你得到的PDF可能只有个空壳子,关键内容都没了。另外wkhtmltopdf对CSS3的支持不太好,页面会变形。

第二种方法,用Selenium加上浏览器的打印功能。Selenium能控制真实的Chrome浏览器。代码会打开浏览器,加载完网页后,通过Chrome的打印对话框生成PDF。这样JS渲染的内容都能拿到。

from selenium import webdriver
 options = webdriver.ChromeOptions()
 options.add_argument('--headless')
 driver = webdriver.Chrome(options=options)
 driver.get('https://example.com')
 通过Chrome DevTools Protocol打印PDF
 result = driver.execute_cdp_cmd('Page.printToPDF', {})

这个方法效果不错,网页图片、样式都很完整。缺点是你得装Chrome浏览器以及对应版本的驱动。代码啰嗦,运行还慢,每转一个网页要启动一次浏览器。

第三种方法,用Playwright。这是微软出的自动化工具。它内置了Chromium浏览器,你不用单独安装。它的PDF转换功能是原生支持的。代码比Selenium短很多。

from playwright.sync_api import sync_playwright
 with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto('https://example.com')
    page.pdf(path='output.pdf')

Playwright会自动等待网页加载完成。遇到需要滚动才能显示的内容,你可以加两行代码滚动到底部。它生成的PDF跟浏览器里看到的一模一样。唯一的代价是安装包比较大,大概100多M,因为它内置了Chromium。

我个人推荐你用第三种。如果你经常要批量转网页,Playwright最省心。它不需要额外装浏览器,不用操心版本匹配问题。代码稳定,很少出幺蛾子。

你可能会想,转PDF时页面太长怎么办。你可以设置纸张大小和缩放比例。比如转成A4纸,页面太长就分页。这样打印出来也好看。

还有个小技巧。有些网页有弹窗广告,会影响PDF效果。你可以在Playwright里先隐藏特定元素,再生成PDF。代码也不复杂。

这三种方法我都用过。pdfkit适合老旧网站,Selenium适合调试学习,Playwright适合日常干活。你自己看着办吧。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

 

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2123 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 2123 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章