Introducción al selenio en Python 3

Introduction Selenium Python 3



Selenium es un marco utilizado para probar aplicaciones web. Selenium automatiza un navegador, como Chrome o Firefox, para ejecutar pruebas en su sitio web deseado. El selenio también es una herramienta de raspado web muy poderosa. Selenium admite JavaScript y todas las funciones modernas del navegador. Esta herramienta es muy eficaz para extraer información de sitios web.

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







Prerrequisitos

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.com . Asegúrese de consultar 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 mediante PIP se instalarán solo en el directorio del proyecto, en lugar de hacerlo de forma global.

El 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

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

En este punto, Python virtualenv El módulo debe instalarse globalmente.

Crea el directorio del proyecto python-selenium-basic / en su directorio de trabajo actual, de la siguiente manera:

$ mkdir -pv python-selenium-basic / drivers

Navegue hasta el directorio de su proyecto recién creado python-selenium-basic / , como sigue:

$cdpython-selenium-basic /

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

$ virtualenv .env

El entorno virtual de Python ahora debería crearse en el directorio de su proyecto '.

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

$ fuente.env/ bin / activar

Como puede ver, el entorno virtual de Python está activado para este directorio de proyecto.

Instalación de la biblioteca de Selenium Python

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

Puede instalar esta biblioteca usando PIP 3, de la siguiente manera:

$ pip3 instalar selenium

La biblioteca Selenium Python ahora debería estar instalada.

Ahora que la biblioteca Selenium Python está instalada, 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 Firefox Gecko

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

Para descargar el controlador de Firefox Gecko, visite el GitHub lanza la página de mozilla / geckodriver desde un navegador web.

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

Para descargar el controlador Firefox Gecko, desplácese un poco hacia abajo y haga clic en el archivo tar.gz geckodriver de Linux, según la arquitectura de su sistema operativo.

Si está utilizando un sistema operativo de 32 bits, haga clic en el geckodriver-v0.26.0-linux32.tar.gz Enlace.

Si está utilizando un sistema operativo de 64 bits, haga clic en el geckodriver-v0.26.0-linuxx64.tar.gz Enlace.

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

Su navegador debería pedirle que guarde el archivo. Seleccione Guardar el archivo y luego haga clic en OK .

El archivo del controlador Firefox Gecko debe descargarse en el ~ / Descargas directorio.

Extrae el geckodriver-v0.26.0-linux64.tar.gz archivo del ~ / Descargas directorio al conductores / directorio de su proyecto ingresando el siguiente comando:

$alquitrán -xzf~/Descargas/geckodriver-v0.26.0-linux64.tar.gz-Cconductores/

Una vez que se extrae el archivo del controlador Firefox Gecko, se conductor gecko 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 Selenium Firefox Gecko

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

Primero, abra el directorio del proyecto python-selenium-basic / con su IDE o editor favorito. En este artículo, usaré Visual Studio Code.

Crea la nueva secuencia de comandos de Python ex01.py y escriba las siguientes líneas en el script.

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas
de tiempo importardormir
navegador=webdriver.Firefox(ruta_ejecutable='./drivers/geckodriver')
navegador.obtener('http://www.google.com')
dormir(5)
navegador.dejar()

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

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 Firefox Gecko funciona con Selenium, ejecute lo siguiente ex01.py Secuencia de comandos de Python:

$ python3 ex01.py

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

Instalación del controlador web de Chrome

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

Debe descargar la misma versión del controlador web de Chrome que la de su navegador web 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 Acerca de 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 el controlador web de Chrome, visite el página oficial de descarga del controlador de Chrome .

En el Lanzamientos actuales sección, el controlador web de Chrome para las versiones más recientes 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 , desplácese un poco hacia abajo y debería encontrar la versión deseada.

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

Ahora debería descargarse el archivo del controlador web de Chrome.

El archivo del controlador web de Chrome ahora debería descargarse en el ~ / Descargas directorio.

Puede extraer el chromedriver-linux64.zip archivo del ~ / Descargas directorio al conductores / directorio de su proyecto con el siguiente comando:

$ descomprimir~/ Descargas / chromedriver_linux64.Código Postal-d drivers /

Una vez que se ha extraído el archivo del controlador web de Chrome, conductor cromado 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 web de Selenium Chrome

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

Primero, cree la nueva secuencia de comandos de Python ex02.py y escriba las siguientes líneas de códigos en el script.

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas
de tiempo importardormir
navegador=webdriver.Cromo(ruta_ejecutable='./controladores/chromedriver')
navegador.obtener('http://www.google.com')
dormir(5)
navegador.dejar()

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

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

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

Para probar si el controlador web de Chrome funciona con Selenium, ejecute el ex02.py Secuencia de comandos de Python, de la siguiente manera:

$ python3 ex01.py

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

Conceptos básicos del web scraping con selenio

Utilizaré el navegador web Firefox a partir de ahora. También puede utilizar Chrome, si lo desea.

Una secuencia de comandos básica de Selenium Python debería parecerse a la secuencia de comandos que se muestra en la siguiente captura de pantalla.

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

A continuación, importe el Teclas de selenium.webdriver.common.keys . Esto le ayudará a enviar pulsaciones de teclas del teclado al navegador que está automatizando desde Selenium.

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

Para cargar un sitio web o URL (estaré cargando el sitio web https://www.duckduckgo.com ), llama a obtener() método del navegador objeto en su navegador Firefox.

Con Selenium, puede escribir sus pruebas, realizar el desguace web y, finalmente, cerrar el navegador con el dejar() método del navegador objeto.

Arriba está el diseño básico de un script de Selenium 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.

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas

navegador=webdriver.Firefox(ruta_ejecutable='./drivers/geckodriver')

navegador.obtener('https://www.duckduckgo.com')
impresión('Título:% s'% navegador.título)
navegador.dejar()

Una vez que haya terminado, guarde el archivo.

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

Después de ejecutar el ex04.py script, debería:

1) Abre Firefox
2) Cargue su página web deseada
3) Obtener el título de la página.
4) Imprime el título en la consola
5) Y finalmente, cierra el navegador.

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

$ python3 ex04.py

Ejemplo 2: Impresión de títulos de varias páginas web

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

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

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas

navegador=webdriver.Firefox(ruta_ejecutable='./drivers/geckodriver')


urls= ['https://www.duckduckgo.com', 'https://linuxhint.com', 'https://yahoo.com']
porurlenURL:
navegador.obtener(url)
impresión('Título:% s'% navegador.título)
navegador.dejar()

Una vez que haya terminado, guarde la secuencia de comandos de Python ex05.py .

Aquí el urls list mantiene la URL de cada página web.

A por El bucle se utiliza para iterar a través del urls elementos de la lista.

En cada iteración, Selenium le dice al navegador que visite el url y obtenga 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 la secuencia de comandos de Python ex05.py , y debería ver el título de cada página web en la urls lista.

$ python3 ex05.py

Este es un ejemplo de cómo Selenium puede realizar la misma tarea con varias 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 para extraer datos de páginas web usando Selenium. Esto también se conoce como raspado web.

Primero, visite el Random.org enlace de Firefox. La página debería generar una cadena aleatoria, como puede ver en la captura de pantalla a continuación.

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

Para ver cómo se representan los datos de la cadena aleatoria en HTML, seleccione los datos de la cadena aleatoria y presione el botón derecho del mouse (RMB) y haga clic en Inspeccionar elemento (Q) , como se indica en la captura de pantalla siguiente.

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 el icono de inspección () y coloque el cursor sobre la cadena de datos aleatoria que desea extraer. La representación HTML de los datos debe mostrarse como antes.

Como puede ver, los datos de la cadena aleatoria están envueltos en un HTML por 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 la nueva secuencia de comandos de Python ex06.py y escriba las siguientes líneas de códigos en el script

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas

navegador=webdriver.Firefox(ruta_ejecutable='./drivers/geckodriver')

navegador.obtener('https://www.random.org/strings/?num=1&len=20&digits
= en & upperalpha = en & loweralpha = en & unique = en & format = html & rnd = new '
)

dataElement=navegador.find_element_by_css_selector('pre.data')
impresión(dataElement.texto)
navegador.dejar()

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

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

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

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

Bajo el pre.data elemento se ha almacenado en el dataElement variable.

A continuación, el guión imprime el contenido de texto del texto seleccionado. pre.data elemento.

Si ejecuta el ex06.py Python, debería extraer los datos de la 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 Secuencia de comandos de Python, extrae una cadena de datos aleatoria diferente de la página web.

Ejemplo 4: extracción de una lista de datos de una 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 random-name-generator.info desde 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 utilizando Selenium.

Si inspecciona la lista de nombres más de cerca, puede ver que es una lista ordenada ( morir etiqueta). los morir 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 ( en el etiqueta) dentro de la morir etiqueta.

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

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas

navegador=webdriver.Firefox(ruta_ejecutable='./drivers/geckodriver')

navegador.obtener('http://random-name-generator.info/')

lista de nombres=navegador.find_elements_by_css_selector('ol.nameList li')

pornombreenlista de nombres:
impresión(nombre.texto)

navegador.dejar()

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

Aquí el browser.get () carga la página web del generador de nombres aleatorios en el navegador Firefox.

los browser.find_elements_by_css_selector () método utiliza el selector de CSS ol.nameList li para encontrar todo en el elementos dentro del morir etiqueta que tiene el nombre de la clase lista de nombres . He guardado todos los seleccionados en el elementos en el lista de nombres variable.

A por El bucle se utiliza para iterar a través del lista de nombres lista de en el elementos. En cada iteración, el contenido de la en el El elemento está impreso en la consola.

Si ejecuta el ex07.py Python, obtendrá todos los nombres aleatorios de la página web y los 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, debería devolver una nueva lista de nombres de usuario aleatorios, como puede ver en la captura de pantalla a continuación.

Ejemplo 5: Envío de formulario: búsqueda en DuckDuckGo

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

Primera visita Motor de búsqueda DuckDuckGo desde el navegador web Firefox.

Si inspecciona el campo de entrada de búsqueda, debe tener la identificación search_form_input_homepage , como puede ver en la captura de pantalla a continuación.

Ahora, cree la nueva secuencia de comandos de Python ex08.py y escriba las siguientes líneas de códigos en el script.

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas
navegador=webdriver.Firefox(ruta_ejecutable='./drivers/geckodriver')
navegador.obtener('https://duckduckgo.com/')
searchInput=navegador.find_element_by_id('search_form_input_homepage')
searchInput.send_keys('selenio hq'+ Llaves.INGRESAR)

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

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

los browser.find_element_by_id () El método selecciona el elemento de entrada con el id. search_form_input_homepage y lo almacena en el searchInput variable.

los searchInput.send_keys () El método se utiliza para enviar datos de pulsaciones de teclas al campo de entrada. En este ejemplo, envía la cadena selenio hq , y la tecla Enter se presiona usando el Keys.ENTER constante.

Tan pronto como el motor de búsqueda DuckDuckGo reciba la tecla Enter, presione ( Keys.ENTER ), busca y muestra el resultado.

Ejecutar el ex08.py Secuencia de comandos de Python, de la siguiente manera:

$ python3 ex08.py

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

Escribió automáticamente selenio hq en el cuadro de texto de búsqueda.

Tan pronto como el navegador reciba la tecla Enter, presione ( Keys.ENTER ), mostraba el resultado de la búsqueda.

Ejemplo 6: Enviar un formulario en W3Schools.com

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

Primero, visite el Página de formularios HTML de W3Schools.com desde el 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 , los Apellido el campo de entrada debe tener la identificación lname , y el Botón de enviar debería tener el escribe enviar , como puede ver en la captura de pantalla a continuación.

Para enviar este formulario usando Selenium, cree la nueva secuencia de comandos de Python ex09.py y escriba las siguientes líneas de códigos en el script.

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas
navegador=webdriver.Firefox(ruta_ejecutable='./drivers/geckodriver')
navegador.obtener('https://www.w3schools.com/html/html_forms.asp')
fname=navegador.find_element_by_id('fname')
fname.claro()
fname.send_keys('Shahriar')
lname=navegador.find_element_by_id('lname')
lname.claro()
lname.send_keys('Shovon')
botón de enviar=navegador.find_element_by_css_selector('entrada [tipo =' enviar ']')
botón de enviar.send_keys(Teclas.INGRESAR)

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

Aquí el browser.get () abre la página de formularios HTML de W3schools en el navegador web Firefox.

los browser.find_element_by_id () El método encuentra los campos de entrada por el id. fname y lname y los almacena en el fname y lname variables, respectivamente.

los fname.clear () y lname.clear () los métodos borran el nombre predeterminado (John) fname valor y apellido (Doe) lname valor de los campos de entrada.

los fname.send_keys () y lname.send_keys () tipo de métodos Shahriar y Shovon en el Nombre de pila y Apellido campos de entrada, respectivamente.

los browser.find_element_by_css_selector () El método selecciona el Botón de enviar del formulario y lo almacena en el botón de enviar variable.

los submitButton.send_keys () El método envía la tecla Enter presione ( Keys.ENTER ) al Botón de enviar de la forma. Esta acción envía el formulario.

Ejecutar el ex09.py Secuencia de comandos de Python, de la siguiente manera:

$ python3 ex09.py

Como puede ver, el formulario se envió automáticamente con las entradas correctas.

Conclusión

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