Golong se da cuenta de la captura de pantalla del navegador del servidor

Cuando estaba usando Golang para el trabajo de desarrollo recientemente, me inspiró el artículo publicado por la cuenta pública técnica 360. Pensé si es posible usar Golang para operar un navegador sin cabeza para lograr funciones como rastreadores, capturas de pantalla y pruebas automatizadas. Después de investigar y probar, descubrí que la implementación de golang también es una buena opción.

Antecedentes

La Cuenta Pública de Tecnología 360 una vez publicó un artículo "Captura de pantalla del navegador del servidor" , que explica en detalle la tecnología de captura de pantalla del lado del servidor basada en Selenium (Python SDK), que es muy operable.

El autor ha utilizado Python + Selenium para implementar rastreadores y funciones de prueba automatizadas simples. Se trata de las tecnologías y componentes utilizados en el artículo anterior. Creo que los principiantes pueden implementar completamente la función de captura de pantalla del lado del servidor a través de la enseñanza práctica de este artículo.

Sin embargo, la implementación de la captura de pantalla basada en Selenium tiene las siguientes desventajas:

  • Necesita instalar Selenium o PhantomJS

  • PhantomJS ha detenido el mantenimiento

  • Selenium necesita chromedriver para funcionar

  • chromedriver tiene ciertos requisitos para la versión de Chrome

  • Debe usar la biblioteca html2canvas JS al tomar capturas de pantalla

Se puede ver que la construcción del entorno general (incluida la comparación de versiones entre varios software) todavía requiere mucho tiempo y esfuerzo para adaptarse y probar. Por lo tanto, el autor del artículo original también proporcionó una solución "Docker integrada" al final del artículo anterior. Después de dockerizar el entorno anterior, se puede resolver el problema de la implementación del entorno.

La solución basada en golang puede resolver perfectamente los problemas anteriores. El requisito del entorno de tiempo de ejecución de esta solución es que solo se necesita instalar el navegador Chrome.

El navegador sin cabeza es una forma sin navegador, puede usar todas las funciones admitidas por el navegador sin abrir el navegador, por ejemplo: obtener HTML, ejecutar Javascript, representar la página web de destino, obtener cookies, etc. Este artículo utiliza principalmente el cromo sin cabeza. El "navegador" mencionado a continuación se refiere al cromo sin cabeza. El marco principal Para utilizar fácilmente Chrome sin cabeza en los programas de Golang, se necesitan algunos marcos de código abierto. Hay muchas bibliotecas que implementan la interacción de Chrome sin cabeza. Después de la comparación, elegí chromedp. Las características principales de chromedp son:

  • Proporciona una forma más rápida y fácil de conducir el navegador.
  • Proporciona una interfaz API subyacente rica (basada en el protocolo CDP-Protocolo de depuración de Chrome)
  • Proporciona una interfaz API superior flexible (acciones y tareas), similar a las acciones de WebElement de Selenium
  • A excepción del navegador en sí, no hay dependencias externas (como Selenium, PhantomJS, etc.)
  • "Compilar una vez, copiar en todas partes, ejecutar en todas partes" (basado en las características de golang)

Implementar instalación

go get -u github.com/chromedp/chromedp

Código de implementación de captura de pantalla

package main

Después de la compilación y ejecución, el efecto de la captura de pantalla de URL en el código es el siguiente

image.gif

Exportar PDF En este marco, también puede exportar fácilmente la página WEB señalada por la URL como un archivo PDF (llame a la función "imprimir como PDF" del navegador), simplemente llame al siguiente método:

// 导出指定元素为PDF

Tomando el sitio web 360.cn como ejemplo, el efecto del PDF exportado se muestra en la figura a continuación

imagen

Use los siguientes métodos para capturar imágenes de pantalla completa

func main() {

Tomando el sitio web 360.cn como ejemplo, el efecto de interceptar una imagen de pantalla completa se muestra a continuación

imagen

Simular otros dispositivos Chromedp admite la simulación de múltiples dispositivos (modificando la forma del Agente de usuario del navegador), el siguiente código implementa la solicitud para simular iPhone7:

func main() {

El efecto es el siguiente

imagen

La operación combinada chromedp proporciona las estructuras de datos de Acciones y Tareas para que los usuarios combinen cualquier acción de operación WEB para ejecutar. Puede consultar los siguientes ejemplos en la página de inicio de github para obtener detalles, que no se repetirán aquí. Escribe al final

Utilizando el marco de trabajo de golang y chromedp, con la ayuda de la interfaz CDP de Chrome, casi todas las operaciones del navegador se pueden implementar en Chrome sin cabeza.

En el ejemplo de 2.1, utilizamos menos de 40 líneas de código para implementar la función de captura de pantalla del navegador del servidor. Al mismo tiempo, a excepción del código del navegador Chrome, el SDK de Golang y el propio cromedp, no hay referencia a otros códigos o herramientas.

Según los resultados de las pruebas anteriores, podemos seguir desarrollando:

  • Herramienta de página de servidor conveniente y versátil [captura de pantalla / exportación de PDF] para otros proyectos de productos. Escenario de aplicación:
  • El front-end ha desarrollado hermosos gráficos de estilo, que deben exportarse como imágenes o PDF como archivos adjuntos de correo electrónico y enviarse a los usuarios para su visualización;
  • Envíe regularmente indicadores y gráficos importantes al buzón del usuario, sin que el usuario inicie sesión en el sistema para ver los datos.
  • Desarrolle una eficiente [plataforma de prueba automatizada WEB] para automatizar las pruebas de productos WEB. Escenario de aplicación:
  • Después de actualizar el entorno en línea, ejecute automáticamente casos de prueba y funciones clave de prueba (iniciar sesión, agregar, ver datos de prueba, verificar datos de devolución de interfaz, etc.)

Recomendación de servicio

Publicado 0 artículos originales · me gusta 0 · visitas 338

Supongo que te gusta

Origin blog.csdn.net/weixin_47143210/article/details/105659098
Recomendado
Clasificación