bianning0308 发表于 2025-11-5 09:46:42

我来签到了,学习进度跟不上了

寒时enjoy 发表于 2025-11-5 09:59:35

保存网页的神器

小坛砸 发表于 2025-11-5 11:01:30


import asyncio
import re
from pyppeteer import launch


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


async def process_single_url(browser, url):
    """处理单个URL:生成PDF + 截取logo(用URL路径作为文件名)"""
    page = None
    try:
      # 清理URL生成合法文件名前缀
      file_prefix = clean_filename(url)
      
      # 创建新页面
      page = await browser.newPage()
      await page.setViewport({'width': 1280, 'height': 800})
      
      # 访问URL并等待加载
      print(f"\n开始处理:{url}")
      await page.goto(url, timeout=30000, waitUntil='networkidle0')
      await page.waitForSelector('body', timeout=10000)
      
      # 生成PDF(用清理后的URL作为文件名)
      pdf_path = f"{file_prefix}_page.pdf"
      await page.pdf({
            'path': pdf_path,
            'format': 'A4',
            'printBackground': True,
            'displayHeaderFooter': False,
            'margin': {'top': '1cm', 'right': '1cm', 'bottom': '1cm', 'left': '1cm'}
      })
      print(f"✅ PDF生成成功:{pdf_path}")
      
      # 截取logo
      logo_selector = 'body .hdc a img'
      logo_path = f"{file_prefix}_logo.png"
      await page.waitForSelector(logo_selector, timeout=10000)
      logo_element = await page.querySelector(logo_selector)
      await logo_element.screenshot({'path': logo_path})
      print(f"✅ Logo截图成功:{logo_path}")
      
    except Exception as e:
      print(f"❌ 处理{url}失败:{str(e)}")
    finally:
      if page:
            await page.close()


async def main():
    # 批量处理的URL列表
    urls = [
      'https://fishc.com.cn',
      'https://fishc.com.cn/forum.php?mod=collection',# 淘帖
      'https://fishc.com.cn/forum.php?mod=guide'   # 导读
    ]
   
    browser = None
    try:
      browser = await launch(
            headless=True,
            executablePath=r'C:\Program Files\Google\Chrome\Application\chrome.exe',
      )
      
      for url in urls:
            await process_single_url(browser, url)
            
    except Exception as e:
      print(f"浏览器启动错误:{e}")
    finally:
      if browser:
            await browser.close()
      print("\n批量处理完成!")


if __name__ == '__main__':
    asyncio.run(main())

skhzhuanqian 发表于 2025-11-5 11:12:30

实用工具

applinux 发表于 2025-11-5 11:19:03

这个工具挺好的,我也再用~~~

小芒果炒酸奶 发表于 2025-11-5 11:44:59

谢谢分享这个小工具

petite6er 发表于 2025-11-5 13:39:36

pyppeteer 模块装了来试试

萧随风 发表于 2025-11-5 14:03:21

快来打开学习

不周山_python 发表于 2025-11-5 14:29:02

学习到了

忘川hd 发表于 2025-11-5 14:42:22

这个工具好!

小明ys 发表于 2025-11-5 14:46:34

正好对异步不是很了解,借此了解一下{:10_256:}

lu10086 发表于 2025-11-5 15:02:56

学到了

dafan_ 发表于 2025-11-5 15:06:20

学习了,马上去试试

不周山_python 发表于 2025-11-5 17:19:39

学习到了

tkiss 发表于 2025-11-5 17:31:45

学习了

ilikeet 发表于 2025-11-5 17:46:36

真不错,先学习

岁尘 发表于 2025-11-5 18:33:08

正想搞点东西,这个工具不错。异步编程学习一下

jinzhao666 发表于 2025-11-5 19:48:53

网页自动化截图工具-打卡学习
利用 Pyppeteer 调用本机 Chrome 浏览器,实现网页截图、PDF 生成

Ixl 发表于 2025-11-5 23:42:38

喜欢

SiegfriedStyx 发表于 2025-11-6 00:23:33

能截完整的图,很棒啊
页: 1 2 [3] 4
查看完整版本: 网页自动化截图工具(Pyppeteer)(★★☆)