鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[☆☆★★☆] 网页自动化截图工具(Pyppeteer)(★★☆)

[复制链接]
发表于 2025-11-5 09:46:42 | 显示全部楼层
我来签到了,学习进度跟不上了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 09:59:35 | 显示全部楼层
保存网页的神器
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 11:01:30 | 显示全部楼层

  1. import asyncio
  2. import re
  3. from pyppeteer import launch


  4. def clean_filename(url):
  5.     """清理URL中的非法字符,生成合法文件名"""
  6.     # 匹配Windows/Linux/Mac中不允许的文件名字符(/ : ? * " < > | \)
  7.     illegal_chars = r'[\/:*?"<>|\\]'
  8.     # 用下划线替换非法字符,连续多个特殊字符合并为一个下划线
  9.     cleaned = re.sub(illegal_chars, '_', url)
  10.     # 移除首尾多余的下划线
  11.     cleaned = cleaned.strip('_')
  12.     # 限制文件名长度
  13.     return cleaned[:100]  # 保留前100个字符


  14. async def process_single_url(browser, url):
  15.     """处理单个URL:生成PDF + 截取logo(用URL路径作为文件名)"""
  16.     page = None
  17.     try:
  18.         # 清理URL生成合法文件名前缀
  19.         file_prefix = clean_filename(url)
  20.         
  21.         # 创建新页面
  22.         page = await browser.newPage()
  23.         await page.setViewport({'width': 1280, 'height': 800})
  24.         
  25.         # 访问URL并等待加载
  26.         print(f"\n开始处理:{url}")
  27.         await page.goto(url, timeout=30000, waitUntil='networkidle0')
  28.         await page.waitForSelector('body', timeout=10000)
  29.         
  30.         # 生成PDF(用清理后的URL作为文件名)
  31.         pdf_path = f"{file_prefix}_page.pdf"
  32.         await page.pdf({
  33.             'path': pdf_path,
  34.             'format': 'A4',
  35.             'printBackground': True,
  36.             'displayHeaderFooter': False,
  37.             'margin': {'top': '1cm', 'right': '1cm', 'bottom': '1cm', 'left': '1cm'}
  38.         })
  39.         print(f"&#9989; PDF生成成功:{pdf_path}")
  40.         
  41.         # 截取logo
  42.         logo_selector = 'body .hdc a img'
  43.         logo_path = f"{file_prefix}_logo.png"
  44.         await page.waitForSelector(logo_selector, timeout=10000)
  45.         logo_element = await page.querySelector(logo_selector)
  46.         await logo_element.screenshot({'path': logo_path})
  47.         print(f"&#9989; Logo截图成功:{logo_path}")
  48.         
  49.     except Exception as e:
  50.         print(f"&#10060; 处理{url}失败:{str(e)}")
  51.     finally:
  52.         if page:
  53.             await page.close()


  54. async def main():
  55.     # 批量处理的URL列表
  56.     urls = [
  57.         'https://fishc.com.cn',
  58.         'https://fishc.com.cn/forum.php?mod=collection',  # 淘帖
  59.         'https://fishc.com.cn/forum.php?mod=guide'   # 导读
  60.     ]
  61.    
  62.     browser = None
  63.     try:
  64.         browser = await launch(
  65.             headless=True,
  66.             executablePath=r'C:\Program Files\Google\Chrome\Application\chrome.exe',
  67.         )
  68.         
  69.         for url in urls:
  70.             await process_single_url(browser, url)
  71.             
  72.     except Exception as e:
  73.         print(f"浏览器启动错误:{e}")
  74.     finally:
  75.         if browser:
  76.             await browser.close()
  77.         print("\n批量处理完成!")


  78. if __name__ == '__main__':
  79.     asyncio.run(main())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 11:12:30 | 显示全部楼层
实用工具
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 11:19:03 | 显示全部楼层
这个工具挺好的,我也再用~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 11:44:59 | 显示全部楼层
谢谢分享这个小工具
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 13:39:36 | 显示全部楼层
pyppeteer 模块装了来试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 14:03:21 | 显示全部楼层
快来打开学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 14:29:02 From FishC Mobile | 显示全部楼层
学习到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 14:42:22 From FishC Mobile | 显示全部楼层
这个工具好!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 14:46:34 | 显示全部楼层
正好对异步不是很了解,借此了解一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 15:02:56 From FishC Mobile | 显示全部楼层
学到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 15:06:20 | 显示全部楼层
学习了,马上去试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 17:19:39 From FishC Mobile | 显示全部楼层
学习到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 17:31:45 From FishC Mobile | 显示全部楼层
学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 17:46:36 | 显示全部楼层
真不错,先学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 18:33:08 | 显示全部楼层
正想搞点东西,这个工具不错。异步编程学习一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 19:48:53 | 显示全部楼层
网页自动化截图工具-打卡学习
利用 Pyppeteer 调用本机 Chrome 浏览器,实现网页截图、PDF 生成
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-5 23:42:38 | 显示全部楼层
喜欢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-11-6 00:23:33 | 显示全部楼层
能截完整的图,很棒啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-8-8 05:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表