Métodos recientemente investigados para controlar la API de Chrome para capturas de pantalla automáticas. Luego vi el artículo del blog https://www.cnblogs.com/superhin/archive/2004/01/13/11481910.html . El artículo decía que Selenium no admite capturas de pantalla de toda la página. La razón es que aunque Chrome proporciona el comando Ejecutar "Capturar captura de pantalla a tamaño completo" en las herramientas de desarrollo, no proporciona executeCdpCommand
el comando en CDP .
Para resolver este problema, saqué el código fuente de Chromium y luego vi que esta "Captura de captura de pantalla a tamaño completo" en realidad tomó una simulación de dispositivo y ajusté la altura para que fuera igual a la altura de la página, y luego tomé una captura de pantalla. de la pantalla actual.
También presté atención a las comunidades de programación extranjeras y descubrí que este es básicamente el caso en el extranjero. Se configura temporalmente una simulación de dispositivo y luego se toma una captura de pantalla de la pantalla actual. Después de tomar la foto, la simulación de dispositivo se apaga .
En este caso, use el lenguaje Python para operar de la siguiente manera:
from selenium import webdriver
from time import sleep
import base64
# 接入既有的浏览器进程
options = webdriver.ChromeOptions()
options.debugger_address = "127.0.0.1:9222"
driver = webdriver.Chrome(options=options)
# 取出页面的宽度和高度
page_width = driver.execute_script("return document.body.scrollWidth")
page_height = driver.execute_script("return document.body.scrollHeight")
# 直接开启设备模拟,不要再手动开devtools了,否则截图截的是devtools的界面!
driver.execute_cdp_cmd('Emulation.setDeviceMetricsOverride', {
'mobile':False, 'width':page_width, 'height':page_height, 'deviceScaleFactor': 1})
# 执行截图
res = driver.execute_cdp_cmd('Page.captureScreenshot', {
'fromSurface': True})
# 返回的base64内容写入PNG文件
with open('hao123.png', 'wb') as f:
img = base64.b64decode(res['data'])
f.write(img)
# 等待截图完成
sleep(15)
# 关闭设备模拟
driver.execute_cdp_cmd('Emulation.clearDeviceMetricsOverride', {
})