Corriendo Selenium sin cabeza con Chrome

Corriendo Selenium sin cabeza con Chrome
Si desea realizar la automatización web de Selenium o el desguace web con el navegador web Chrome, ejecuta la versión gráfica del navegador web Chrome de forma predeterminada. No es un problema cuando ejecuta su script de selenio desde un entorno de escritorio gráfico de Linux (i.mi., GNOME 3, KDE, XFCE4). Pero si quieres ejecutar tu script de selenio en un entorno sin cabeza (yo.mi., Ubuntu Server, CentOS/RHEL Server) donde no tiene instalado ningún entorno de escritorio gráfico, entonces esto no funcionará.

Afortunadamente, puede configurar Selenium para ejecutar el navegador web Chrome en modo sin cabeza. En este modo, el navegador web Chrome se ejecutará sin ninguna interfaz de usuario gráfica. Entonces, Selenium puede hacer automatización web, desguace web, pruebas de navegador, etc. Uso del navegador web Chrome en servidores Linux donde no tiene instalado ningún entorno de escritorio gráfico.

En este artículo, te mostraré cómo ejecutar Selenium con el navegador web Chrome en modo sin cabeza. Usaré la biblioteca de Selenium Python y escribiré los scripts de selenio utilizando el lenguaje de programación de Python 3. Entonces empecemos.

Prerrequisitos:

Para probar los comandos y ejemplos de este artículo, debe tener,

1) Una distribución de Linux (preferiblemente Ubuntu) instalada en su computadora.
2) Python 3 instalado en su computadora.
3) PIP 3 instalado en su computadora.
4) Google Chrome instalado en su computadora.

Puede encontrar muchos artículos sobre estos temas en Linuxhint.comunicarse. Asegúrese de consultarlos si necesita alguna ayuda.

Preparación del entorno virtual de Python 3 para el proyecto:

El entorno virtual de Python se utiliza para crear un directorio de proyecto de Python aislado. Los módulos Python que instale utilizando PIP se instalarán solo en el directorio del proyecto, no a nivel mundial.

Pitón virtualenv El módulo se utiliza para administrar entornos virtuales de Python.

Puedes instalar python virtualenv Módulo a nivel mundial usando PIP 3 de la siguiente manera:

$ sudo pip3 instalar virtualenv

Pitón virtualenv debe instalarse.

Crear un directorio de proyecto sin cabeza cromada/ En su directorio de trabajo actual de la siguiente manera:

$ mkdir -pv Chrome -Headless/Drivers

Navegue a su directorio de proyectos recién creado sin cabeza cromada/ como sigue:

$ CD Chrome-Headless /

Cree un entorno virtual de Python en su directorio de proyecto con el siguiente comando:

$ virtualenv .venado

El entorno virtual de Python debe crearse en el .Venv/ Directorio en su proyecto Directorio.

Active el entorno virtual de Python de su directorio de proyecto con el siguiente comando:

$ fuente .venv/bin/activar

Instalación de la biblioteca de Selenium Python:

Selenium Library está disponible en el repositorio oficial de Python Pypi.

Puede instalar Selenium Python Library usando PIP 3 de la siguiente manera:

$ PIP3 Instalar selenio

Se debe instalar la biblioteca de Selenium Python.

Instalación del controlador web Chrome:

Chrome Web Driver le permitirá controlar o automatizar el navegador web Google Chrome desde Selenium.

En esta sección, le mostraré cómo instalar el controlador web Chrome.

Primero, abra Google Chrome y visite Chrome: // Configuración/Ayuda.

Una vez que se carga la página, debe encontrar el número de versión de Google Chrome en el Sobre Chrome sección. Tenga en cuenta las primeras 3 secciones del número de versión marcada en la captura de pantalla a continuación.

Para descargar Chrome Web Driver, visite la página oficial de descarga de Chrome Driver.

En el Lanzamientos actuales Sección, el controlador web de Chrome para las versiones más actuales del navegador web de Google Chrome debe estar disponible, como puede ver en la captura de pantalla a continuación. Uno de los lanzamientos actuales de controladores web de Chrome debe tener un número de versión coincidente con su navegador web Google Chrome. Las primeras 3 secciones del número de versión del controlador web Chrome y el navegador web de Google Chrome deben coincidir.

Si la versión que estás buscando no está en el Lanzamientos actuales sección, desplácese hacia abajo un poco, y deberías poder encontrarla.

Una vez que haga clic en el número de versión de Chrome Web Driver, debería llevar a su página de descarga. Clickea en el ChromedRiver_Linux64.cremallera Archivo desde aquí.

Se debe descargar el archivo de controladores web de Chrome.

El descargado ChromedRiver_Linux64.cremallera el archivo debe estar en su ~/Descargas directorio.

$ ls -lh ~/descargas

Extraer el ChromedRiver_Linux64.cremallera Archivo del ~/Descargas directorio al conductores/ Directorio de su proyecto de la siguiente manera:

$ unzip ~/descargas/chromedriver_linux64.Controladores ZIP -D/

Un nuevo archivo cromedríguico debe crearse en el conductores/ Directorio de su proyecto Una vez que se extrae el archivo de controladores web Chrome, como puede ver en la captura de pantalla a continuación.

Prueba del controlador web Chrome en modo sin cabeza:

En esta sección, le mostraré cómo ejecutar Selenium usando el controlador Chrome en modo sin cabeza.

Primero, crea un nuevo script de Python ex01.py en su directorio de proyecto y escriba las siguientes líneas de códigos en él.

Desde Selenium Import WebDriver
de Selenium.webdriver.común.llaves de importación de teclas
de Selenium.webdriver.cromo.Opciones de importación Opciones
ChromeOptions = options ()
cromeoptions.Sin cabeza = verdadero
navegador = webdriver.Chrome (ejecutable_path = "./controladores/cromedriver ", options = ChromeOptions)
navegador.Get ("http: // linuxhint.com ")
Imprimir ("Título: % S" % Browser.título)
navegador.abandonar()

Una vez que haya terminado, guarde el ex01.py Guión de pitón.

Estas líneas importan todas las cosas requeridas del selenio biblioteca.

Como he dicho anteriormente, por defecto, el controlador Chrome intenta ejecutar Google Chrome en modo gráfico. Para ejecutar Google Chrome en modo sin cabeza, tenemos que decirle al controlador Chrome que pase algunas opciones adicionales. Esta línea crea un Opción Objeto que podemos transmitir al controlador web de Chrome más tarde.

Puede ejecutar Google Chrome en modo sin cabeza simplemente configurando el sin cabeza propiedad del cromeoptions oponerse a Verdadero.

O puede usar el add_argument () método del cromeoptions OBJETO para agregar el -sin cabeza Argumento de línea de comandos para ejecutar Google Chrome en modo sin cabeza utilizando el controlador web de Selenium Chrome.

Puedes usar un webdriver.Cromo() Método para inicializar/ejecutar un navegador web Google Chrome desde Selenium. El ejecutable_path El argumento se usa para decirle a Selenium que use el cromedríguico binario del conductores/ directorio del proyecto. El opción El argumento le dice a Selenium que use nuestras opciones personalizadas cromeoptions.

Una vez que Selenium ejecuta un navegador web Google Chrome utilizando el controlador web de Selenium Chrome, devuelve un navegador objeto. Podemos usarlo para controlar la instancia de Google Chrome más tarde.

El navegador.conseguir() El método carga el Linuxhint.comunicarse Sitio web en el navegador web Google Chrome en segundo plano (en modo sin cabeza).

Una vez que se carga la página, navegador.título La propiedad tendrá el título del sitio web. La pitón imprimir() El método imprime el título del sitio web en la consola.

Entonces el navegador.abandonar() El método cierra el navegador web Google Chrome.

Para probar si Selenium puede funcionar en modo sin cabeza, ejecute el script de Python ex01.py como sigue:

$ python3 ex01.py

Debe imprimir el título del sitio web en la consola sin abrir el navegador web Google Chrome en modo gráfico.

Solo para mostrarle que funciona desde los servidores sin cabeza de Linux (donde no se instala ninguna interfaz gráfica de usuario), he ejecutado el script de Python ex01.py en el servidor Ubuntu 20.04 LTS. Como puede ver, el script funciona bien.

Raspado web con selenio en modo sin cabeza usando el controlador web Chrome:

En esta sección, le mostraré un ejemplo de desguace web en Selenium utilizando el controlador web Chrome en modo sin cabeza.

Primero, visite el generador de nombre aleatorio.Información de Google Chrome o cualquier otro navegador web. Este sitio web generará 10 nombres aleatorios cada vez que vuelva a cargar la página, como puede ver en la captura de pantalla a continuación. Nuestro objetivo es extraer estos nombres aleatorios usando selenio en modo sin cabeza.

Para conocer la estructura HTML de la lista, debe abrir el Herramienta de desarrollador de Chrome. Para hacerlo, presione el botón derecho del mouse (RMB) en la página y haga clic en Inspeccionar o presionar + + I.

Herramienta de desarrollador de Chrome debe abrirse. Clickea en el Inspeccionar icono () como se marca en la captura de pantalla a continuación.

Entonces, pasee la lista de Nombres aleatorios. La lista debe destacarse como marcada en la captura de pantalla a continuación. Luego, presione el botón del mouse izquierdo (LMB) para seleccionar la lista.

El código HTML de la lista debe destacarse en el Elementos pestaña del Herramienta de desarrollador de Chrome. Aquí, la lista de nombres aleatorios está dentro de un div elemento. El div El elemento tiene el clase nombre resultados. Dentro de él, tenemos un olio elemento con el clase nombre lista de nombres. Dentro de olio elemento, cada uno de los nombres está en un li elemento.

De esto podemos decir que para llegar al li Etiquetas, tenemos que seguir div.Resultados> OL.namelist> li

Entonces, nuestro selector CSS será div.Resultados ol.namelista li (solo reemplace el > Señales con espacio en blanco)

Para extraer estos nombres aleatorios, cree un nuevo script de Python ex02.py y escriba las siguientes líneas de códigos en él.

Desde Selenium Import WebDriver
de Selenium.webdriver.común.llaves de importación de teclas
de Selenium.webdriver.cromo.Opciones de importación Opciones
ChromeOptions = options ()
cromeoptions.Sin cabeza = verdadero
navegador = webdriver.Chrome (ejecutable_path = "./controladores/cromedriver ", options = ChromeOptions)
navegador.Get ("http: // generador de nombre aleatorio.info/")
namelist = navegador.find_elements_by_css_selector ('div.Resultados ol.Namelist li ')
Para el nombre en Namelist:
Imprimir (nombre.texto)
navegador.abandonar()

Una vez que haya terminado, guarde el ex02.py Guión de pitón.

He explicado las líneas 1-8 en la sección anterior de este artículo. Estos son los mismos que en ex01.py.

La línea 10 carga el sitio web del generador de nombres aleatorios utilizando el navegador.conseguir() método.

La línea 11 selecciona la lista de nombres utilizando el navegador.find_elements_by_css_selector () método. Este método utiliza el selector CSS div.Resultados ol.namelista li Para encontrar la lista de nombres. Luego, la lista de nombres se almacena en el lista de nombres variable.

En las líneas 13 y 14, un para el bucle se usa para iterar a través del lista de nombres lista de li elementos. En cada iteración, el contenido del li El elemento se imprime en la consola.

Ahora, ejecute el guión de Python ex02.py como sigue:

$ python3 ex02.py

Como puedes ver, el guión de Python ex02.py obtuvo todos los nombres aleatorios de la página web.

Si ejecuta el script por segunda vez, debe devolver una nueva lista de nombres aleatorios, como puede ver en la captura de pantalla a continuación.

Problemas que puede enfrentar Running Selenium en modo sin cabeza:

Has visto anteriormente que ejecutar selenio en modo sin cabeza usando el controlador Chrome es tan fácil como configurar el cromeoptions.sin cabeza marcar a Verdadero.

Es posible que esta solución no funcione para usted en algunas distribuciones de Linux. En esta sección, voy a hablar sobre algunos de los problemas que puede enfrentar mientras ejecuta Selenium en modo sin cabeza usando el controlador web Chrome.

Por defecto, el navegador web Google Chrome hace mucho sandboxing (ejecuta muchas cosas en un entorno aislado). Esto puede causar problemas al ejecutar selenio en modo sin cabeza utilizando el controlador web Chrome. Puede deshabilitar el sandboxing para Google Chrome usando el -sin argumento bandera.

Para agregar el -sin argumento FLAG, agregue la siguiente línea antes de inicializar el controlador Selenium Chrome usando webdriver.Cromo() método (línea 8 en ex01.py Script de Python).

cromeoptions.add_argument ("-no-sandbox")

Es posible que tenga problemas para hacer ciertas cosas en el navegador web Google Chrome de Selenium, como tomar capturas de pantalla del sitio web, etc. Esto puede suceder porque, en modo sin cabeza, Google Chrome puede establecer una resolución de pantalla virtual incorrecta. Entonces, su sitio web puede no verse bien. Puede establecer la resolución de pantalla virtual deseada para el navegador web de Google Chrome en modo sin cabeza utilizando el -tamaño de ventana opción de línea de comandos.

Por ejemplo, para establecer el ancho de la pantalla virtual en 1280 PX y altura a 720 PX, añade el -tamaño de ventana Opción de línea de comando antes de inicializar el controlador Selenium Chrome usando webdriver.Cromo() método (línea 8 en ex01.py Script de Python) como sigue:

cromeoptions.add_argument ("-Window-Size = 1280,720")

Es posible que su servidor no tenga una GPU instalada, o puede tener una GPU que el navegador web Google Chrome no sabrá cómo usar. Por defecto, Google Chrome debe deshabilitar automáticamente la aceleración de la GPU si no hay una GPU disponible o si hay una GPU no compatible disponible. En algunos casos, puede dejar de hacerlo. En ese caso, es posible que Selenium no pueda ejecutar el navegador web Google Chrome en modo sin cabeza. Para resolver este problema, debe deshabilitar la aceleración de GPU utilizando el -desactivar la GPU bandera.

Para agregar el -desactivar la GPU FLAG, agregue la siguiente línea antes de inicializar el controlador Selenium Chrome usando webdriver.Cromo() método (línea 8 en ex01.py Script de Python).

cromeoptions.ADD_ARGUMENT ("-Disable-GPU")

Conclusión:

En este artículo, le he mostrado cómo configurar Selenium en modo sin cabeza usando el controlador web Chrome. He cubierto los conceptos básicos, que lo ayudarán a comenzar con la automatización del navegador Selenium sin cabeza, las pruebas web y el raspado web.

También he cubierto algunos de los argumentos/banderas de la línea de comandos de Google Chrome que puede usar para resolver algunos de los problemas que puede tener al ejecutar Selenium en modo sin cabeza utilizando el controlador web Chrome.

Hay muchas más opciones de línea de comandos de Google Chrome disponibles, que no cubrí en este artículo. Estas opciones de línea de comandos pueden ser útiles para su proyecto. Puede encontrar todas las opciones de línea de comandos de Google Chrome compatibles en la lista de interruptores de línea de comandos de Chromium por Peter Beverloo Page.