【Python 小脚本·大用途 · 第 2 篇】
1. 痛点 100 字
做汇报、写教程、存证据时,只想把「当前网页」截成一整张长图,但浏览器插件要么收费、要么有水印。今天用 28 行 Python 实现「一键网页截图」,支持长图、自定义宽高、延迟加载,还能批量跑 URL 列表。
2. 脚本 28 行
#!/usr/bin/env python3
# webshot.py
import sys, time, argparse
from pathlib import Path
from playwright.sync_api import sync_playwrightdef shot(url, out, width=1280, height=None, delay=2):"""截图核心函数"""with sync_playwright() as p:iphone = p.devices['iPhone 14 Pro'] # 也可选 desktopbrowser = p.webkit.launch(headless=True)page = browser.new_page(**iphone) if not height else \browser.new_page(viewport={'width': width, 'height': height})page.goto(url, wait_until='networkidle')time.sleep(delay) # 等懒加载page.screenshot(path=out, full_page=True)browser.close()print(f"✅ 已保存 {out}")def main():parser = argparse.ArgumentParser(description="网页长图截图工具")parser.add_argument("url", help="要截图的网址")parser.add_argument("-o", "--output", default="shot.png", help="输出文件名")parser.add_argument("-W", "--width", type=int, default=1280, help="视口宽度")parser.add_argument("-H", "--height", type=int, help="视口高度(可选)")parser.add_argument("-d", "--delay", type=int, default=2, help="等待秒数")args = parser.parse_args()shot(args.url, args.output, args.width, args.height, args.delay)if __name__ == "__main__":main()
3. 一行运行命令
安装依赖(仅一次):
pip install playwright
playwright install webkit
截图百度首页:
python webshot.py https://www.baidu.com -o baidu.png
批量跑 URL 列表(bash 循环):
cat urls.txt | xargs -I {} python webshot.py {} shots/{}.png
4. 效果示例
运行后目录:
shots/
├── baidu.png # 整页长图
└── github.com.png
长图效果:自动拼接滚动区域,含懒加载图片。
5. 可选参数 & 常见坑
• -W 800 -H 1200
生成移动端尺寸;
• 某些站点需登录,可在脚本里加 page.fill()
+ page.click()
;
• 若出现字体乱码,Linux 下安装 fonts-noto-cjk
;
• 大页面内存占用高,可在 launch()
里加 --disable-gpu
。
把脚本加入 PATH,随时 webshot <URL>
,长图自由!