You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Selenium无头模式下截取网页全屏截图?

在Selenium无头模式下获取网页完整全屏截图的解决方案

你当前的代码设置了窗口大小但仅截取到页面左上角,这是因为无头模式下Chrome的渲染逻辑和普通模式存在差异,再加上部分网站的响应式布局适配问题,需要调整参数或使用更精准的截图方法。以下是几种可行的解决方案:

方法1:补充无头模式关键渲染参数

Chrome无头模式需要额外配置参数来确保页面正常渲染,避免布局错位:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

options = Options()
options.add_argument('--headless=new')
# 添加解决无头模式渲染问题的核心参数
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# 明确窗口尺寸+设备像素比,避免缩放问题
options.add_argument('--window-size=1920,1080')
options.add_argument('--force-device-scale-factor=1')
# 模拟真实浏览器UA,避免网站针对无头模式做限制
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')

srv = Service()
driver = webdriver.Chrome(service=srv, options=options)

driver.get("https://www.orf.at/")
# 用隐式等待替代time.sleep,确保页面加载完成
driver.implicitly_wait(5)

driver.save_screenshot("screen_full.png")
driver.quit()

方法2:调用Chrome DevTools API截取完整页面

如果页面内容超过窗口高度,save_screenshot只能截取当前视口,此时可以用Chrome的调试协议直接获取完整页面截图:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import base64

options = Options()
options.add_argument('--headless=new')
options.add_argument('--disable-gpu')
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')

srv = Service()
driver = webdriver.Chrome(service=srv, options=options)

driver.get("https://www.orf.at/")
driver.implicitly_wait(5)

# 通过CDP命令捕获超出视口的完整页面
screenshot_data = driver.execute_cdp_cmd(
    "Page.captureScreenshot",
    {"captureBeyondViewport": True, "fromSurface": True}
)

# 将base64格式的截图数据保存为本地图片
with open("full_page.png", "wb") as f:
    f.write(base64.b64decode(screenshot_data['data']))

driver.quit()

方法3:动态调整窗口为页面实际高度

先获取页面的真实滚动高度,再调整窗口尺寸后截图:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

options = Options()
options.add_argument('--headless=new')
options.add_argument('--disable-gpu')
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')

srv = Service()
driver = webdriver.Chrome(service=srv, options=options)

driver.get("https://www.orf.at/")
driver.implicitly_wait(5)

# 获取页面完整滚动高度
page_height = driver.execute_script("return document.body.scrollHeight")
# 设置窗口尺寸为页面宽度+完整高度
driver.set_window_size(1920, page_height)

driver.save_screenshot("full_screen.png")
driver.quit()

注意事项

  • 尽量避免使用time.sleep,优先用implicitly_wait或显式等待(WebDriverWait),确保页面元素和布局完全加载
  • 部分网站可能有反爬机制,添加真实的User-Agent参数可以降低被识别为无头浏览器的概率

内容的提问来源于stack exchange,提问作者Rapid1898

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 04:12:35