Selenium WebDriver al servicio del desarrollador

Decodificación del informe de Dmitry Kostichev con Backend-stories // Versión de video dentro

Si de repente necesita integrarse en un recurso de Internet de terceros y no tiene tiempo para resolverlo, Selenium vendrá al rescate. Dmitry Kostichev dijo en el ejemplo de su proyecto cómo automatizar el trabajo en el navegador sin abandonar su servicio.


Hola todos. Mi nombre es Dmitry y hoy compartiré mi experiencia de usar Selenium en el desarrollo de backend. ¿Para qué es esto? Selenium es necesario para automatizar la interacción con algunos recursos de Internet, para nivelar los factores humanos que completan algunos datos, etc. Para el desarrollo, esto puede ser necesario en los casos en que, por ejemplo, no hay API en el recurso de Internet, etc. Y en el ejemplo de mi proyecto, la tarea consistía en completar los datos del cliente (antes de esto, el servicio tenía que preparar correctamente toda la información) y registrarlos en este sitio, en este caso MasterCard.



Tras una consideración adicional de este sitio, se reveló que no hay una API a la que podamos llegar y hacer todo. Todo el procesamiento se realiza en scripts JS, en los que nada está claro y todos los datos están codificados. Se tomó la decisión: probar Selenium para estos fines, es decir, fijaremos a Selenium todo nuestro servicio, que llevará a cabo este registro en un momento determinado.

Al final, ¿qué es Selenium y cómo trabajar con él? El proyecto Selenium consiste en una biblioteca que se comunica con la interfaz del controlador web para un navegador específico. En la diapositiva se muestra una lista de bibliotecas y navegadores disponibles. Y ahora mostraré cómo funciona aproximadamente en mi proyecto.

Mire un screencast o un video detallado al final de la publicación.

Ahora el servicio generará un archivo, lo cargará inmediatamente a este sitio y comprobará si todo se ha registrado correctamente. Aquí, de hecho, pega, carga, etc. Y ahora probablemente saltará sobre el hecho de que todo será exitoso. La automatización es lo suficientemente rápida y no requiere grandes recursos. Todo, aparentemente, estaba perfectamente registrado.

¿Cómo cocinar todo esto? La biblioteca Selenium tiene comandos básicos como:

  • Crear un controlador web de instancia para un navegador específico;
  • Clics de enlaces;
  • Trabajar con elementos: clics, etc.

El controlador web le permite recibir sesiones y cookies como en un navegador normal. También puede cambiarlos y personalizarlos usted mismo. También puede ejecutar scripts js en la página. Hay una biblioteca que extiende esta funcionalidad del propio selenio, llamada selenio. Su característica principal es ocultar la creación de controladores de instancia. Como ejemplo, vemos que simplemente llamamos al comando abrir, le damos algún tipo de enlace y el navegador ya se está iniciando, no hay necesidad de configurar nada. Y la biblioteca expande el trabajo con elementos, algunos preajustes adicionales. Todo parece conveniente, puede resolverlo rápidamente y usarlo todo.

Cuando se trabaja con recursos en línea y, en última instancia, con Selenium, hay algunos patrones de diseño. Y uno de ellos son los objetos de página. Su esencia radica en el hecho de que describimos todos estos elementos en una determinada clase. Y luego podemos reutilizarlo y parece más fácil. Aquí hay algo como esto: llamamos al comando abrir, le damos a la página objetos clase y luego podemos usar todos sus métodos, por ejemplo, trabajar con elementos.



Buscamos elementos por el modelo DOM de la página HTML por selectores como xpath, css y otros. Sus principales diferencias, por ejemplo entre xpath y css, son que xpath puede ir "profundo", así como hacia arriba y hacia abajo. Y css, por el contrario, solo está abajo. Es decir, estos son los selectores más utilizados.



En última instancia, necesitamos un navegador directamente, que Selenoid puede ayudarnos directamente. En esencia, es un marco que controla la creación y modificación de estos contenedores con navegadores. Pero está diseñado más para sistemas cargados donde estos navegadores se crean en grandes cantidades. Y en nuestra situación, esto no es muy necesario, solo usa el contenedor en sí. Y ahora mostraré cómo esto debería funcionar ya en el servidor.

En realidad, la interacción de la página se parece a esto, es un procesamiento de datos bastante lineal. En este caso, me dividí en pasos: transiciones a páginas. Aquí es donde los datos se rellenan y, directamente, se descargan mediante archivos. En principio, todo es bastante simple. Así es como se ve una clase de objeto de página, que recuerda bastante a un DTO. Simplemente describimos los elementos, por ejemplo, aquí en el caso actual de PCSS Selectum. Esta es la sintaxis de Selenide.



Para que esto funcione, necesitamos una descripción del controlador remoto para conectarnos al contenedor acoplable. La configuración principal que necesita para llegar allí es el navegador que utilizaremos y, de hecho, la resolución y otras líneas importantes para el navegador. Pero para trabajar con el contenedor acoplable, también necesitará configuraciones como el modo sin cabeza. Es decir, en su forma actual, girará en el servidor. Este modo deshabilita los gráficos en el navegador, por lo que funcionará más rápido y ocupará menos recursos.

Además, no habrá Sandbox, que está deshabilitado por la seguridad de Chromium en este caso, y será posible ejecutar su propio código, JS u otro. El tercer parámetro es necesario para que Chromium funcione normalmente en máquinas Unix, grabe correctamente los archivos de tempo. Y el cuarto, de hecho, es necesario para que podamos cargar archivos. Y lo más importante, el controlador remoto tiene un indicador que le permite descargar un archivo del almacenamiento local donde se ejecuta la aplicación, ya a través del controlador Eliminar.



Ahora mostraré cómo funciona con el contenedor acoplable. Descargue el contenedor docker y la aplicación en sí. También se lanzará aproximadamente de la misma manera, es decir, en principio, no habrá nada nuevo. Solo aquí veremos la interacción en algún tipo de registro. En principio, también se pueden monitorear, trabajar con ellos, etc. Por lo tanto, puedes entender la interacción que está sucediendo. Esta es la salida del contenedor acoplable con Chromium directamente donde está el navegador.



En principio, todo funciona perfectamente con el contenedor acoplable. Además, todo se verifica y el registro se completa con éxito. Además, ¿qué problemas generales podrían encontrarse en este enfoque? No tenía tanto problema como ignorancia. Las transferencias de archivos en el contenedor acoplable, como de costumbre, hacen todo: el cambio de volumen. Pero en este caso, si aún desea ejecutar localmente, debe tener dos configuraciones para el proyecto, pero, como se vio después, el controlador remoto se puede configurar a través del indicador. Puede transferir este archivo directamente a través de sí mismo, y no se necesitan gestos adicionales.

También deberá seguir la página con la que trabajamos: un recurso en línea. Porque, en mi caso, este es otro sistema, con el que nadie tiene una relación de mi equipo, y esto también necesita ser monitoreado, monitoreado por registros, etc. Al igual que con el navegador, se actualiza constantemente, debe monitorearlo, el soporte puede caer. Bueno, en principio, de alguna manera puede configurar los registros y no habrá problemas.

Al final, ¿cuánto más fácil se ha vuelto? Me pareció que podía resolver el problema de interactuar con este sitio mucho más rápido que si supiera el código js. Es decir, para comprender Selenium y la interacción puede ser más rápida que con el hecho de que los datos están codificados y no se sabe cómo volver a codificarlos. Lo principal es la velocidad en el desarrollo.

Informe de video - de 16.30


All Articles