Python脚本来获取完整页面截图CPD
方案二:使用 CDP(Chrome DevTools Protocol)来获取完整页面截图:
python
def take_full_screenshot(driver, filename):
try:
# 首先最大化窗口
driver.maximize_window()
time.sleep(1)
# 尝试使用不同的缩放方法
try:
driver.execute_script("document.body.style.zoom='80%'")
except:
try:
driver.execute_script("document.body.style.transform='scale(0.8)'; document.body.style.transformOrigin='top left'")
except:
try:
driver.execute_cdp_cmd('Emulation.setPageScaleFactor', {'pageScaleFactor': 0.8})
except:
print("设置缩放比例失败,使用默认比例")
# 使用CDP获取完整页面截图
def get_full_page_screenshot():
metrics = driver.execute_cdp_cmd('Page.getLayoutMetrics', {})
width = math.ceil(metrics['contentSize']['width'])
height = math.ceil(metrics['contentSize']['height'])
# 设置设备尺寸和视口
driver.execute_cdp_cmd('Emulation.setDeviceMetricsOverride', {
'mobile': False,
'width': width,
'height': height,
'deviceScaleFactor': 1,
})
# 捕获截图
screenshot = driver.execute_cdp_cmd('Page.captureScreenshot', {
'format': 'png',
'captureBeyondViewport': True
})
# 禁用设备仿真
driver.execute_cdp_cmd('Emulation.clearDeviceMetricsOverride', {})
return screenshot
# 获取截图并保存
screenshot = get_full_page_screenshot()
with open(filename, 'wb') as f:
f.write(base64.b64decode(screenshot['data']))
print(f"完整页面截图已保存: {filename}")
# 恢复原始缩放比例
try:
driver.execute_script("document.body.style.zoom='100%'")
except:
try:
driver.execute_script("document.body.style.transform='scale(1)'; document.body.style.transformOrigin='top left'")
except:
try:
driver.execute_cdp_cmd('Emulation.setPageScaleFactor', {'pageScaleFactor': 1.0})
except:
print("恢复缩放比例失败")
except Exception as e:
print(f"截图保存失败: {e}")如果使用方案二,需要在文件开头添加导入:
python
import math
import base64这两种方案的主要区别:
方案一通过模拟滚动来确保加载所有内容,然后进行截图
方案二使用 Chrome DevTools Protocol 直接获取完整页面的截图
建议先尝试方案二,因为它更直接且效率更高。如果遇到问题,再切换到方案一。方案二的优点是:
执行速度更快
不需要实际滚动页面
能够捕获超出视口的内容
图片质量更好
两种方案都包含了之前的缩放功能,所以不会影响到缩放效果。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果