Introducción al selenio en Python 3

Introducción al selenio en Python 3
Selenium es un marco utilizado para probar aplicaciones web. Selenium automatiza un navegador, como Chrome o Firefox, para ejecutar las pruebas en su sitio web deseado. Selenium también es una herramienta de raspado web muy potente. Selenium es compatible con JavaScript y todas las características del navegador moderno. Esta herramienta es muy efectiva para extraer información de los sitios web.

Este artículo le mostrará cómo configurar Selenium en su distribución de Linux (i.mi., Ubuntu), así como cómo realizar la automatización web básica y el desguace web con la biblioteca Selenium Python 3.

Requisitos previos

Para probar los comandos y ejemplos utilizados en este artículo, debe tener lo siguiente:

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) El navegador web Google Chrome o Firefox instalado en su computadora.

Puede encontrar muchos artículos sobre estos temas en Linuxhint.comunicarse. Asegúrese de revisar estos artículos si necesita más 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 utilizando PIP se instalarán solo en el directorio del proyecto, en lugar de a nivel mundial.

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

Puedes instalar el python virtualenv Módulo a nivel mundial usando PIP 3, como sigue:

$ sudo pip3 instalar virtualenv

PIP3 descargará e instalará globalmente todos los módulos requeridos.

En este punto, el Python virtualenv El módulo debe instalarse a nivel mundial.

Crear el directorio del proyecto Python-Selenium-Básico/ En su directorio de trabajo actual, como sigue:

$ MKDIR -PV Python-Selenium-Básico/conductores

Navegue a su directorio de proyectos recién creado Python-Selenium-Básico/, como sigue:

$ CD Python-Selenium-Básico/

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

$ virtualenv .envidia

El entorno virtual de Python ahora debe crearse en su directorio de proyecto.'

Active el entorno virtual de Python en su directorio de proyecto a través del siguiente comando:

$ fuente .env/bin/activar

Como puede ver, el entorno virtual de Python se activa para este directorio de proyecto.

Instalación de la biblioteca de Selenium Python

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

Puede instalar esta biblioteca usando PIP 3, como sigue:

$ PIP3 Instalar selenio

La biblioteca de Selenium Python ahora se debe instalar.

Ahora que se instala la biblioteca de Selenium Python, lo siguiente que debe hacer es instalar un controlador web para su navegador web favorito. En este artículo, le mostraré cómo instalar los controladores web de Firefox y Chrome para Selenium.

Instalación del controlador de gecko de Firefox

El controlador Gecko Firefox le permite controlar o automatizar el navegador web Firefox usando Selenium.

Para descargar el controlador de gecko de Firefox, visite la página de lanzamientos de GitHub de Mozilla/Geckodriver desde un navegador web.

Como puedes ver, v0.26.0 es la última versión del controlador de gecko de Firefox en el momento en que se escribió este artículo.

Para descargar el controlador Gecko Firefox, desplácese hacia abajo un poco y haga clic en el alquitrán de Geckodriver de Linux.Archivo GZ, dependiendo de la arquitectura de su sistema operativo.

Si está utilizando un sistema operativo de 32 bits, haga clic en el geckodriver-v0.26.0-Linux32.alquitrán.GZ enlace.

Si está utilizando un sistema operativo de 64 bits, haga clic en el geckodriver-v0.26.0-Linuxx64.alquitrán.GZ enlace.

En mi caso, descargaré la versión de 64 bits del controlador de gecko de Firefox.

Su navegador debe pedirle que guarde el archivo. Seleccionar Guardar el archivo y luego haga clic DE ACUERDO.

El archivo de controladores de gecko de Firefox debe descargarse en el ~/Descargas directorio.

Extraer el geckodriver-v0.26.0-Linux64.alquitrán.GZ Archivo del ~/Descargas directorio al conductores/ Directorio de su proyecto ingresando el siguiente comando:

$ tar -xzf ~/descargas/geckodriver -v0.26.0-Linux64.alquitrán.Controladores GZ -C/

Una vez que se extrae el archivo de controladores de gecko de Firefox, un nuevo geckodriver El archivo binario debe crearse en el conductores/ Directorio de su proyecto, como puede ver en la captura de pantalla a continuación.

Prueba del controlador de gecko de Selenium Firefox

En esta sección, le mostraré cómo configurar su primer script de Selenium Python para probar si el controlador de gecko de Firefox está funcionando.

Primero, abra el directorio del proyecto Python-Selenium-Básico/ con tu ide o editor favorito. En este artículo, utilizaré el código Visual Studio.

Crea el nuevo script de Python ex01.py, y escriba las siguientes líneas en el script.

Desde Selenium Import WebDriver
de Selenium.webdriver.común.llaves de importación de teclas
Desde el tiempo de sueño
navegador = webdriver.Firefox (ejecutable_path = "./controladores/geckodriver ")
navegador.Get ('http: // www.Google.com ')
dormir (5)
navegador.abandonar()

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

Explicaré el código en una sección posterior de este artículo.

La siguiente línea configura Selenium para usar el controlador Firefox Gecko desde el conductores/ Directorio de su proyecto.

Para probar si el controlador de gecko de Firefox está trabajando con Selenium, ejecute lo siguiente ex01.py Python Script:

$ python3 ex01.py

El navegador web de Firefox debe visitar automáticamente Google.com y cierre después de 5 segundos. Si esto ocurre, entonces el controlador Selenium Firefox Gecko está funcionando correctamente.

Instalación del controlador web Chrome

El controlador web Chrome le permite controlar o automatizar el navegador web Google Chrome usando Selenium.

Debe descargar la misma versión del controlador web Chrome que la de su navegador web de Google Chrome.

Para encontrar el número de versión de su navegador web Google Chrome, visite Chrome: // Configuración/Ayuda en Google Chrome. El número de versión debe estar en el Sobre Chrome Sección, como puede ver en la captura de pantalla a continuación.

En mi caso, el número de versión es 83.0.4103.116. Las primeras tres partes del número de versión (83.0.4103, en mi caso) debe coincidir con las tres primeras partes del número de versión del controlador web de Chrome.

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

En el Lanzamientos actuales Sección, el controlador web Chrome para los lanzamientos más actuales del navegador web Google Chrome estará disponible, como puede ver en la captura de pantalla a continuación.

Si la versión de Google Chrome que está utilizando no está en el Lanzamientos actuales Sección, desplácese hacia abajo un poco, y debería encontrar su versión deseada.

Una vez que haga clic en la versión correcta del controlador web Chrome, debería llevarlo a la siguiente página. Clickea en el ChromedRiver_Linux64.cremallera enlace, como se indica en la captura de pantalla a continuación.

El archivo de controladores web de Chrome ahora se debe descargar.

El archivo de controladores web de Chrome ahora debe descargarse en el ~/Descargas directorio.

Puedes extraer el Chromedriver-Linux64.cremallera Archivo del ~/Descargas directorio al conductores/ Directorio de su proyecto con el siguiente comando:

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

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

Prueba de controlador web Selenium Chrome

En esta sección, le mostraré cómo configurar su primer script de Selenium Python para probar si el controlador web Chrome está funcionando.

Primero, crea el nuevo script de Python ex02.py, y escriba las siguientes líneas de códigos en el script.

Desde Selenium Import WebDriver
de Selenium.webdriver.común.llaves de importación de teclas
Desde el tiempo de sueño
navegador = webdriver.Chrome (ejecutable_path = "./controladores/cromedriver ")
navegador.Get ('http: // www.Google.com ')
dormir (5)
navegador.abandonar()

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

Explicaré el código en una sección posterior de este artículo.

La siguiente línea configura Selenium para usar el controlador web Chrome desde el conductores/ Directorio de su proyecto.

Para probar si el controlador web de Chrome está trabajando con Selenium, ejecute el ex02.py Python script, como sigue:

$ python3 ex01.py

El navegador web Google Chrome debe visitar automáticamente Google.com y cierre después de 5 segundos. Si esto ocurre, entonces el controlador Selenium Firefox Gecko está funcionando correctamente.

Conceptos básicos de raspado web con selenio

Usaré el navegador web de Firefox a partir de ahora. También puedes usar Chrome, si quieres.

Un script básico de Selenium Python debería verse como el script que se muestra en la captura de pantalla a continuación.

Primero, importe el selenio webdriver desde el selenio módulo.

A continuación, importe el Llaves de selenio.webdriver.común.llaves. Esto lo ayudará a enviar la tecla de teclado presionas al navegador que está automatizando desde Selenium.

La siguiente línea crea un navegador Objeto para el navegador web Firefox utilizando el controlador Gecko Firefox (WebDriver). Puede controlar las acciones del navegador Firefox usando este objeto.

Para cargar un sitio web o URL (cargaré el sitio web https: // www.Pato Pato a ganar.com), llame al conseguir() método del navegador Objeto en su navegador Firefox.

Usando selenio, puede escribir sus pruebas, realizar el desguace web y finalmente, cierre el navegador usando el abandonar() método del navegador objeto.

Arriba es el diseño básico de un script de selenio python. Escribirás estas líneas en todos tus scripts de Selenium Python.

Ejemplo 1: Impresión del título de una página web

Este será el ejemplo más fácil discutido usando Selenium. En este ejemplo, imprimiremos el título de la página web que visitaremos.

Crea el nuevo archivo ex04.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
navegador = webdriver.Firefox (ejecutable_path = "./controladores/geckodriver ")
navegador.Get ('https: // www.Pato Pato a ganar.com ')
Imprimir ("Título: % S" % Browser.título)
navegador.abandonar()

Una vez que haya terminado, guarde el archivo.

Aquí el navegador.título se utiliza para acceder al título de la página web visitada y la imprimir() la función se utilizará para imprimir el título en la consola.

Después de ejecutar el ex04.py guión, debería:

1) Abra Firefox
2) Cargue la página web deseada
3) Obtenga el título de la página
4) Imprima el título en la consola
5) Y finalmente, cierre el navegador

Como puedes ver, el ex04.py El script ha impreso bien el título de la página web en la consola.

$ python3 ex04.py

Ejemplo 2: Impresión de los títulos de múltiples páginas web

Como en el ejemplo anterior, puede usar el mismo método para imprimir el título de múltiples páginas web utilizando el bucle de Python.

Para comprender cómo funciona esto, cree el nuevo script de Python ex05.py y escriba las siguientes líneas de código en el script:

Desde Selenium Import WebDriver
de Selenium.webdriver.común.llaves de importación de teclas
navegador = webdriver.Firefox (ejecutable_path = "./controladores/geckodriver ")
URLS = ['https: // www.Pato Pato a ganar.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
Para URL en URL:
navegador.Obtener (URL)
Imprimir ("Título: % S" % Browser.título)
navegador.abandonar()

Una vez que haya terminado, guarde el guión de Python ex05.py.

Aquí el URLS La lista mantiene la URL de cada página web.

A para el bucle se usa para iterar a través del URLS Lista de elementos.

En cada iteración, Selenium le dice al navegador que visite el url y obtener el título de la página web. Una vez que Selenium ha extraído el título de la página web, se imprime en la consola.

Ejecute el guión de Python ex05.py, y debería ver el título de cada página web en el URLS lista.

$ python3 ex05.py

Este es un ejemplo de cómo Selenium puede realizar la misma tarea con múltiples páginas web o sitios web.

Ejemplo 3: Extracción de datos de una página web

En este ejemplo, le mostraré los conceptos básicos de extraer datos de las páginas web utilizando Selenium. Esto también se conoce como raspado web.

Primero, visite el aleatorio.Org Link desde Firefox. La página debe generar una cadena aleatoria, como puede ver en la captura de pantalla a continuación.

Para extraer los datos de cadena aleatoria usando Selenium, también debe conocer la representación HTML de los datos.

Para ver cómo se representan los datos de cadenas aleatorias en HTML, seleccione los datos de cadena aleatoria y presione el botón derecho del mouse (RMB) y haga clic en Inspeccionar elemento (Q), Como se señaló en la captura de pantalla a continuación.

La representación HTML de los datos debe mostrarse en el Inspector pestaña, como puede ver en la captura de pantalla a continuación.

También puede hacer clic en el Inspeccionar icono ( ) para inspeccionar los datos de la página.

Haga clic en Inspect Icon () y pasee sobre los datos de cadenas aleatorias que desea extraer. La representación HTML de los datos debe mostrarse como antes.

Como puede ver, los datos de cadena aleatorios están envueltos en un HTML pre etiqueta y contiene la clase datos.

Ahora que conocemos la representación HTML de los datos que queremos extraer, crearemos un script de Python para extraer los datos usando Selenium.

Crea el nuevo script de Python ex06.py y escriba las siguientes líneas de códigos en el script

Desde Selenium Import WebDriver
de Selenium.webdriver.común.llaves de importación de teclas
navegador = webdriver.Firefox (ejecutable_path = "./controladores/geckodriver ")
navegador.Get ("https: // www.aleatorio.org/cuerdas/?num = 1 & len = 20 & dígitos
= ON & UPPERALPHA = ON & Loweralpha = On & Unique = On & Format = Html & rnd = nuevo ")
DataLement = navegador.find_element_by_css_selector ('pre.datos')
Imprimir (DataElement.texto)
navegador.abandonar()

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

Aquí el navegador.conseguir() El método carga la página web en el navegador Firefox.

El navegador.find_element_by_css_selector () El método busca el código HTML de la página para obtener un elemento específico y lo devuelve.

En este caso, el elemento sería pre.datos, el pre etiqueta que tiene el nombre de la clase datos.

Bajo el pre.datos El elemento ha sido almacenado en el selento de datos variable.

El script luego imprime el contenido de texto del seleccionado pre.datos elemento.

Si corres el ex06.py Script de Python, debe extraer los datos de cadena aleatoria de la página web, como puede ver en la captura de pantalla a continuación.

$ python3 ex06.py

Como puede ver, cada vez que ejecuto el ex06.py Script de Python, extrae datos de cadena aleatorios diferentes de la página web.

Ejemplo 4: Extracción de la lista de datos de la página web

El ejemplo anterior le mostró cómo extraer un solo elemento de datos de una página web usando Selenium. En este ejemplo, le mostraré cómo usar Selenium para extraer una lista de datos de una página web.

Primero, visite el generador de nombre aleatorio.Información de su navegador web Firefox. Este sitio web generará diez 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.

Si inspecciona la lista de nombres más de cerca, puede ver que es una lista ordenada (olio etiqueta). El olio La etiqueta también incluye el nombre de la clase lista de nombres. Cada uno de los nombres aleatorios se representa como un elemento de lista (li etiqueta) dentro del olio etiqueta.

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

Desde Selenium Import WebDriver
de Selenium.webdriver.común.llaves de importación de teclas
navegador = webdriver.Firefox (ejecutable_path = "./controladores/geckodriver ")
navegador.Get ("http: // generador de nombre aleatorio.info/")
namelist = navegador.find_elements_by_css_selector ('ol.Namelist li ')
Para el nombre en Namelist:
Imprimir (nombre.texto)
navegador.abandonar()

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

Aquí el navegador.conseguir() El método carga la página web del generador de nombres aleatorios en el navegador Firefox.

El navegador.find_elements_by_css_selector () El método utiliza el selector CSS olio.namelista li Para encontrar todo li elementos dentro del olio Etiqueta que tiene el nombre de la clase lista de nombres. He almacenado todos los seleccionados li elementos en el lista de nombres variable.

A 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.

Si corres el ex07.py Script de Python, obtendrá todos los nombres aleatorios de la página web e lo imprimirá en la pantalla, como puede ver en la captura de pantalla a continuación.

$ python3 ex07.py

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

Ejemplo 5: Formulario de envío - Buscando en Duckduckgo

Este ejemplo es tan simple como el primer ejemplo. En este ejemplo, visitaré el motor de búsqueda de Duckduckgo y buscaré el término cuartel de selenio Usando selenio.

Primero, visite el motor de búsqueda de Duckduckgo desde el navegador web Firefox.

Si inspecciona el campo de entrada de búsqueda, debe tener la ID Search_form_input_homepage, Como puede ver en la captura de pantalla a continuación.

Ahora, crea el nuevo script de Python ex08.py y escriba las siguientes líneas de códigos en el script.

Desde Selenium Import WebDriver
de Selenium.webdriver.común.llaves de importación de teclas
navegador = webdriver.Firefox (ejecutable_path = "./controladores/geckodriver ")
navegador.Get ("https: // duckduckgo.com/")
SearchInput = navegador.find_element_by_id ('search_form_input_homepage')
búsqueda.send_keys ('Selenium HQ' + claves.INGRESAR)

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

Aquí el navegador.conseguir() El método carga la página de inicio del motor de búsqueda de Duckduckgo en el navegador web Firefox.

El navegador.find_element_by_id () El método selecciona el elemento de entrada con la ID Search_form_input_homepage y lo almacena en el búsqueda variable.

El búsqueda.send_keys () El método se utiliza para enviar la tecla Presione los datos al campo de entrada. En este ejemplo, envía la cadena cuartel de selenio, y la tecla ENTER se presiona con el Llaves.INGRESAR constante.

Tan pronto como el motor de búsqueda de Duckduckgo reciba la tecla Intro (presione (Llaves.INGRESAR), busca y muestra el resultado.

Ejecutar el ex08.py Python script, como sigue:

$ python3 ex08.py

Como puede ver, el navegador web Firefox visitó el motor de búsqueda de Duckduckgo.

Se escribió automáticamente cuartel de selenio En el cuadro de texto de búsqueda.

Tan pronto como el navegador recibió la tecla Enter presione (Llaves.INGRESAR), mostró el resultado de la búsqueda.

Ejemplo 6: Enviar un formulario en W3Schools.comunicarse

En el Ejemplo 5, el envío del formulario del motor de búsqueda de Duckduckgo fue fácil. Todo lo que tenía que hacer era presionar la tecla ENTER. Pero este no será el caso de todos los envíos de formularios. En este ejemplo, te mostraré un manejo de forma más complejo.

Primero, visite la página de formularios HTML de W3Schools.com del navegador web Firefox. Una vez que se carga la página, debería ver un formulario de ejemplo. Este es el formulario que enviaremos en este ejemplo.

Si inspecciona el formulario, el Nombre de pila El campo de entrada debe tener la identificación fname, el Apellido El campo de entrada debe tener la identificación nombre, y el Botón de enviar debería tener el tipo entregar, Como puede ver en la captura de pantalla a continuación.

Para enviar este formulario con Selenium, cree el nuevo script de Python ex09.py y escriba las siguientes líneas de códigos en el script.

Desde Selenium Import WebDriver
de Selenium.webdriver.común.llaves de importación de teclas
navegador = webdriver.Firefox (ejecutable_path = "./controladores/geckodriver ")
navegador.Get ("https: // www.W3Schools.com/html/html_forms.áspid")
fname = navegador.find_element_by_id ('fname')
fname.claro()
fname.send_keys ('Shahriar')
lname = navegador.find_element_by_id ('lname')
nombre.claro()
nombre.send_keys ('Shovon')
SubtButton = navegador.find_element_by_css_selector ('input [type = "enviar"]')
botón de enviar.send_keys (claves.INGRESAR)

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

Aquí el navegador.conseguir() El método abre la página de formularios HTML W3Schools en el navegador web Firefox.

El navegador.find_element_by_id () El método encuentra los campos de entrada por ID fname y nombre y los almacena en el fname y nombre variables, respectivamente.

El fname.claro() y nombre.claro() Métodos Borrar el nombre predeterminado (John) fname Valor y apellido (DOE) nombre valor de los campos de entrada.

El fname.send_keys () y nombre.send_keys () Tipo de métodos Shahriar y Pala en el Nombre de pila y Apellido Campos de entrada, respectivamente.

El navegador.find_element_by_css_selector () El método selecciona el Botón de enviar de la forma y lo almacena en el botón de enviar variable.

El botón de enviar.send_keys () El método envía la tecla Intro (Llaves.INGRESAR) hacia Botón de enviar de la forma. Esta acción presenta el formulario.

Ejecutar el ex09.py Python script, como sigue:

$ python3 ex09.py

Como puede ver, el formulario se ha enviado automáticamente con las entradas correctas.

Conclusión

Este artículo debería ayudarlo a comenzar con las pruebas del navegador Selenium, la automatización web y las bibliotecas de desguace web en Python 3. Para obtener más información, consulte la documentación oficial de Selenium Python.