如何用Python及CLI在无GUI Linux服务器上实现原生网页截图
如何用Python截取网页截图(无GUI环境)及CLI方案
Python原生实现(适配无GUI Linux服务器)
1. Selenium + Chrome Headless
- 依赖安装:先通过
pip install selenium安装Selenium,再在Linux服务器上安装无头Chrome及对应驱动,比如Debian/Ubuntu系统可执行apt install chromium-browser chromium-chromedriver,注意Chrome与ChromeDriver版本需匹配。 - 代码示例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options def capture_screenshot(url, output_path): chrome_options = Options() chrome_options.add_argument("--headless=new") # 启用新版无头模式 chrome_options.add_argument("--no-sandbox") # 适配服务器无沙箱环境 chrome_options.add_argument("--disable-dev-shm-usage") # 解决临时空间不足问题 chrome_options.add_argument("--window-size=1920,1080") # 设置截图分辨率 with webdriver.Chrome(options=chrome_options) as driver: driver.get(url) driver.save_screenshot(output_path) # 调用示例 capture_screenshot("https://example.com", "screenshot.png")
2. Playwright(更简洁的无头方案)
- 依赖安装:执行
pip install playwright后,运行playwright install chromium自动下载适配的无头Chromium浏览器,无需手动管理驱动。 - 代码示例:
from playwright.sync_api import sync_playwright def capture_screenshot(url, output_path): with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page(viewport={"width": 1920, "height": 1080}) page.goto(url, wait_until="networkidle") # 等待网络空闲,确保页面加载完成 page.screenshot(path=output_path, full_page=True) # 支持截全页 browser.close() # 调用示例 capture_screenshot("https://example.com", "full_page_screenshot.png")
CLI捕获网站截图的方法
1. Chrome Headless 命令行
直接通过无头Chrome的命令行参数完成截图,无需编写代码:
# 截取指定分辨率的页面截图 chromium-browser --headless=new --screenshot=screenshot.png --window-size=1920,1080 https://example.com # 截取全页截图 chromium-browser --headless=new --screenshot=full_page.png --window-size=1920,1080 --full-page https://example.com
2. wkhtmltoimage
基于WebKit的命令行工具,适合静态或简单动态页面的截图:
- 安装:Debian/Ubuntu系统执行
apt install wkhtmltopdf(包内包含wkhtmltoimage工具) - 命令示例:
# 基础截图 wkhtmltoimage --width 1920 --height 1080 https://example.com screenshot.png # 截全页并启用JavaScript支持(适配动态页面) wkhtmltoimage --width 1920 --enable-javascript --javascript-delay 3000 https://example.com full_page.png
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

