Proporcionar una implementación de corte de imágenes largas de páginas web en Selenium

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 executeCdpCommandel 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', {
    
    })

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_35977139/article/details/111552903
Recomendado
Clasificación