Selenio

Ejecución de Selenium sin cabeza con Chrome

Ejecución de 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 está ejecutando su script de Selenium desde un entorno de escritorio gráfico de Linux (i.mi., GNOME 3, KDE, XFCE4). Pero si desea ejecutar su secuencia de comandos de Selenium en un entorno sin cabeza (i.mi., Ubuntu Server, CentOS / RHEL Server) donde no tiene ningún entorno de escritorio gráfico instalado, 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 gráfica de usuario. Por lo tanto, Selenium puede realizar automatización web, desguace web, pruebas de navegador, etc. utilizando el navegador web Chrome en servidores Linux donde no tiene ningún entorno gráfico de escritorio instalado.

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

Requisitos previos:

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.com. Asegúrese de revisarlos si necesita 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 de Python que instale usando PIP se instalarán solo en el directorio del proyecto, no globalmente.

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

Puedes instalar Python virtualenv módulo globalmente utilizando PIP 3 de la siguiente manera:

$ sudo pip3 instalar virtualenv

Pitón virtualenv debe ser instalado.

Crea un directorio de proyecto cromo sin cabeza / en su directorio de trabajo actual de la siguiente manera:

$ mkdir -pv chrome-headless / drivers

Navega hasta el directorio de tu proyecto recién creado cromo sin cabeza / como sigue:

$ cd chrome-headless /

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

$ virtualenv .venv

El entorno virtual de Python debe crearse en el .venv / directorio en el directorio de su proyecto.

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

$ fuente .venv / bin / activar

Instalación de la biblioteca de Selenium Python:

La biblioteca de selenio está disponible en el repositorio oficial de Python PyPI.

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

$ pip3 instalar selenium

Se debe instalar la biblioteca Selenium Python.

Instalación del controlador web de 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 de Chrome.

Primero, abra Google Chrome y visite chrome: // settings / help.

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

Para descargar el controlador web de Chrome, visite la página oficial de descarga del controlador de Chrome.

En el Lanzamientos actuales sección, Chrome Web Driver para las versiones más recientes del navegador web Google Chrome debería estar disponible, como puede ver en la captura de pantalla a continuación. Una de las versiones actuales del controlador web de Chrome debe tener un número de versión que coincida con el de su navegador web Google Chrome. Las primeras 3 secciones del número de versión de Chrome Web Driver y el navegador web Google Chrome deben coincidir.

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

Una vez que haga clic en el número de versión de Chrome Web Driver, debería llevarlo a su página de descarga. Haga clic en el chromedriver_linux64.Código Postal archivo desde aquí.

El archivo del controlador web de Chrome debe descargarse.

El descargado chromedriver_linux64.Código Postal el archivo debe estar en tu ~ / Descargas directorio.

$ ls -lh ~ / Descargas

Extrae el chromedriver_linux64.Código Postal archivo del ~ / Descargas directorio al conductores / directorio de su proyecto de la siguiente manera:

$ descomprimir ~ / Descargas / chromedriver_linux64.controladores zip -d /

Un nuevo archivo conductor cromado debe ser creado en el conductores / directorio de su proyecto una vez que se extrae el archivo de Chrome Web Driver, como puede ver en la captura de pantalla a continuación.

Prueba del controlador web de Chrome en modo sin cabeza:

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

Primero, cree una nueva secuencia de comandos de Python ex01.py en el directorio de su proyecto y escriba las siguientes líneas de códigos en él.

desde el controlador web de importación de selenio
de selenio.webdriver.común.claves importar claves
de selenio.webdriver.cromo.opciones de importación Opciones
chromeOptions = Opciones ()
chromeOptions.headless = Verdadero
browser = webdriver.Chrome (ruta_ejecutable = "./ drivers / chromedriver ", options = chromeOptions)
navegador.get ("http: // linuxhint.com ")
print ("Título:% s"% navegador.título)
navegador.dejar()

Una vez que haya terminado, guarde el ex01.py Secuencia de comandos de Python.

Estas líneas importan todo el material necesario del selenio Biblioteca.

Como he dicho anteriormente, de forma predeterminada, el controlador de Chrome intenta ejecutar Google Chrome en modo gráfico. Para ejecutar Google Chrome en modo sin cabeza, tenemos que decirle al controlador de Chrome que pase algunas opciones adicionales. Esta línea crea una Opciones objeto que podemos pasar al controlador web de Chrome más tarde.

Puede ejecutar Google Chrome en modo sin cabeza simplemente configurando el sin cabeza propiedad de la chromeOptions oponerse a Cierto.

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

Puedes usar un webdriver.Cromo() método para inicializar / ejecutar un navegador web Google Chrome desde Selenium. La ruta_ejecutable El argumento se usa para decirle a Selenium que use el conductor cromado binario del conductores / directorio del proyecto. La opciones El argumento le dice a Selenium que use nuestras opciones personalizadas chromeOptions.

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

La navegador.obtener() método carga el linuxhint.com 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. El pitón impresión() El método imprime el título del sitio web en la consola.

Entonces el navegador.dejar() 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 servidores sin cabeza de Linux (donde no hay una interfaz gráfica de usuario instalada), he ejecutado el script Python ex01.py en Ubuntu Server 20.04 LTS. Como puede ver, el script funciona bien.

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

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

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

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

Herramienta para desarrolladores de Chrome debe ser abierto. Haga clic en el Inspeccionar icono () como se marca en la captura de pantalla a continuación.

Luego, coloque el cursor sobre la lista de Nombres aleatorios. La lista debe resaltarse como se indica en la captura de pantalla a continuación. Luego, presione el botón izquierdo del mouse (LMB) para seleccionar la lista.

El código HTML de la lista debe resaltarse en el Elementos pestaña de la Herramienta para desarrolladores de Chrome. Aquí, la lista de nombres aleatorios está dentro de un div elemento. La div elemento tiene el clase nombre resultados. En su interior, tenemos un ol elemento con el clase nombre lista de nombres. Dentro de ol 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 de CSS será div.resultados ol.nameList li (solo reemplace el > letreros con espacios en blanco)

Para extraer estos nombres aleatorios, cree una nueva secuencia de comandos de Python ex02.py y escriba las siguientes líneas de códigos en él.

desde el controlador web de importación de selenio
de selenio.webdriver.común.claves importar claves
de selenio.webdriver.cromo.opciones de importación Opciones
chromeOptions = Opciones ()
chromeOptions.headless = Verdadero
browser = webdriver.Chrome (ruta_ejecutable = "./ drivers / chromedriver ", options = chromeOptions)
navegador.get ("http: // generador-de-nombres-aleatorios.info / ")
nameList = navegador.find_elements_by_css_selector ('div.resultados ol.nameList li ')
para el nombre en nameList:
imprimir (nombre.texto)
navegador.dejar()

Una vez que haya terminado, guarde el ex02.py Secuencia de comandos de Python.

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 usando el navegador.obtener() método.

La línea 11 selecciona la lista de nombres usando el navegador.find_elements_by_css_selector () método. Este método usa el selector de CSS div.resultados ol.nameList 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 por El bucle se usa para iterar a través del lista de nombres lista de li elementos. En cada iteración, el contenido de la li El elemento está impreso en la consola.

Ahora, ejecute el script de Python ex02.py como sigue:

$ python3 ex02.py

Como puede ver, la secuencia de comandos de Python ex02.py obtuvo todos los nombres aleatorios de la página web.

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

Problemas que puede enfrentar al ejecutar Selenium en modo sin cabeza:

Ha visto anteriormente que ejecutar Selenium en modo sin cabeza usando el controlador de Chrome es tan fácil como configurar el chromeOptions.sin cabeza bandera a Cierto.

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 al ejecutar Selenium en modo sin cabeza usando el controlador web de Chrome.

De forma predeterminada, el navegador web Google Chrome realiza una gran cantidad de sandboxing (ejecuta muchas cosas en un entorno aislado). Esto puede causar problemas al ejecutar Selenium en modo sin cabeza con el controlador web de Chrome. Puede deshabilitar la zona de pruebas para Google Chrome utilizando el -sin caja de arena bandera.

Para agregar el -sin caja de arena , agregue la siguiente línea antes de inicializar el controlador Selenium Chrome usando webdriver.Cromo() métodolínea 8 en ex01.py Secuencia de comandos de Python).

chromeOptions.add_argument ("- sin caja de arena")

Es posible que tenga problemas para hacer ciertas cosas en el navegador web Google Chrome desde Selenium, como tomar capturas de pantalla del sitio web, etc. Esto puede suceder porque, en el modo sin cabeza, Google Chrome puede establecer una resolución de pantalla virtual incorrecta. Por lo tanto, es posible que su sitio web no se vea bien. Puede configurar la resolución de pantalla virtual que desee para el navegador web 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 píxeles, 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étodolínea 8 en ex01.py Secuencia de comandos de Python) de la siguiente manera:

chromeOptions.add_argument ("- tamaño de ventana = 1280,720")

Es posible que su servidor no tenga una GPU instalada o que tenga una GPU que el navegador web Google Chrome no sabrá utilizar. De forma predeterminada, Google Chrome debería deshabilitar automáticamente la aceleración de la GPU si una GPU no está disponible o si hay una GPU no compatible. En algunos casos, es posible que no lo haga. 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 usando el -desactivar-gpu bandera.

Para agregar el -desactivar-gpu , agregue la siguiente línea antes de inicializar el controlador Selenium Chrome usando webdriver.Cromo() métodolínea 8 en ex01.py Secuencia de comandos de Python).

chromeOptions.add_argument ("- deshabilitar-gpu")

Conclusión:

En este artículo, le he mostrado cómo configurar Selenium en modo sin cabeza usando el controlador web de 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 / indicadores de la línea de comandos de Google Chrome que puede usar para resolver algunos de los problemas que puede tener mientras ejecuta Selenium en modo sin cabeza usando el controlador web de 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 la 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 página Lista de interruptores de línea de comandos de Chromium de Peter Beverloo.

Controle y administre el movimiento del mouse entre múltiples monitores en Windows 10
Administrador de mouse de doble pantalla le permite controlar y configurar el movimiento del mouse entre varios monitores, al ralentizar sus movimient...
WinMouse le permite personalizar y mejorar el movimiento del puntero del mouse en una PC con Windows
Si desea mejorar las funciones predeterminadas del puntero del mouse, use el software gratuito WinMouse. Agrega más funciones para ayudarlo a aprovech...
El botón de clic izquierdo del mouse no funciona en Windows 10
Si está utilizando un mouse dedicado con su computadora portátil o computadora de escritorio, pero el el botón izquierdo del mouse no funciona en Wind...