Selenium es una herramienta para automatizar el control de cualquier tipo de navegador web que funcione con lenguajes como Python, Java, C #, Ruby y otros. Veremos cómo usar Selenium con Python en este tutorial. Al usar Python con Selenium, puede iniciar el navegador de su elección, buscar cualquier página web, hacer clic en enlaces mediante programación, completar formularios web y usar otras funciones del navegador como retroceder, avanzar y recargar. El selenio es muy poderoso y facilita más flexibilidad que las herramientas de raspado web como Beautiful Soup y Scrapy. Es posible trabajar directamente con páginas renderizadas completamente en JavaScript como aplicaciones de una sola página, mientras que otras herramientas no pueden. La compensación es que iniciar un navegador para probar y raspar consume más memoria y es más lento.


Automatización de la navegación web

Selenium puede automatizar la navegación web, pero ¿por qué querrías hacer eso en primer lugar? Hay tres buenas razones para la automatización del navegador, y esas son las pruebas, los Web Bots y el Web Scraping.

Pruebas de aplicaciones web

Los sitios web se han convertido en aplicaciones web y, como cualquier otro software, deben probarse para garantizar su correcto comportamiento. La automatización de las pruebas reduce el costo y el tiempo, a la vez que proporciona un medio para realizar pruebas las 24 horas del día. También facilita la revisión entre navegadores. Las pruebas permiten realizar pruebas de regresión más rápidas que pueden ser necesarias después de la depuración o en el desarrollo posterior del software. Es fácil de escalar a una variedad de dispositivos y entornos, lo que permite realizar pruebas entre navegadores y dispositivos fácilmente.

Web Bots

Todo lo que pueda hacer manualmente con un navegador web se puede automatizar con Selenium y Python. Esto es lo que se conoce como Web Bot. Es una pieza de software que ejecuta comandos o realiza tareas de rutina sin la intervención del usuario. Esto se puede aplicar a cualquier tarea repetitiva en línea. Por ejemplo, digamos que pide el mismo burrito todos los días en un sitio web. Bueno, en lugar de completar manualmente el formulario cada vez, puede programar todo el proceso. Cualquier tarea repetitiva en línea ahora se puede optimizar creando una secuencia de comandos de Python.


Controladores web

Para que Python controle un navegador web, se necesita un software llamado Web Driver. Dos controladores muy populares para usar Selenium son el controlador de Firefox y el controlador de Chrome. Veremos ambos. Cada uno de estos controladores es un archivo ejecutable. Firefox usa geckodriver.exe y Chrome usa chromedriver.exe . Una vez que descargue estos archivos, debe agregarlos a su ruta manualmente o especificar la ruta mediante programación. Adoptaremos el último enfoque. Para Firefox gecko, estamos usando la versión Win64Para el controlador de Chrome, usamos la versión de 32 bits.


Lanzamiento de un navegador controlado por selenio

¡Estamos listos para controlar un navegador desde Python usando Selenium! A continuación, se explica cómo iniciar Firefox con Selenium. Tenga en cuenta que estamos apuntando al archivo geckodriver.exe que hemos descargado como ejecutable_path. Si no realiza este paso, el navegador no se iniciará correctamente. Cuando se ejecuta este código, lanza Firefox en el estilo que se ve a continuación con un tema de rayas naranjas en el campo URL para indicar que el navegador está siendo controlado a través de Selenium.

Navegador Selenium Firefox

Lanzamiento de Chrome con selenio

Para iniciar un navegador Chrome, simplemente podemos cambiar el controlador en uso así. Cuando el navegador Chrome se inicia a través de Selenium, muestra un mensaje de que Chrome está siendo controlado por un software de prueba automatizado.

Selenium Google Chrome Browser

Cerrar el navegador

Puede cerrar manualmente el navegador controlado por Selenium haciendo clic en la X como lo haría normalmente. Una mejor opción es que cuando su script finalice el trabajo para el que lo programó , debe cerrar explícitamente el navegador en su código usando el método .quit () .

Navegación sin cabeza en Chrome o Firefox

No es necesario que inicie un navegador para ejecutar su aplicación Selenium si no lo desea. Esto es lo que se conoce como modo sin cabeza . Para usar el modo sin cabeza con cualquier navegador, simplemente use configurar las Opciones () según sea necesario.

Firefox

Cromo


Obteniendo páginas específicas

Para indicarle al navegador controlado por selenio que obtenga contenido de páginas específicas, puede usar el método .get () . A continuación, se muestra un ejemplo de cómo visitar una página web de motor de búsqueda popular en Internet.

método de obtención de selenio


Encontrar elementos en la página

Una vez que el navegador visita una página específica, Selenium puede encontrar elementos en la página con varios métodos. Estos son los métodos que puede utilizar para buscar elementos de página. Como puede ver, hay muchos de ellos. En la mayoría de los casos, solo necesitará dos o tres para lograr lo que necesita hacer. Los métodos .find_elements_by_css_selector () y .find_element_by_xpath () parecen ser muy populares.

Nombre del método
Objeto / lista WebElement devuelto
navegador. find_element_by_class_name ( nombre )
navegador. find_elements_by_class_name ( nombre )
Elementos que usan el nombre de la clase CSS
navegador. find_element_by_css_selector ( selector )
navegador. find_elements_by_css_selector ( selector )
Elementos que coinciden con el selector de CSS
navegador. find_element_by_id ( id )
navegador. find_elements_by_id ( id )
Elementos con un valor de atributo id coincidente
navegador. buscador find_element_by_link_text ( texto )
find_elements_by_link_text ( texto )
<a> elementos que coinciden completamente con el texto proporcionado
navegador. find_element_by_partial_link_text ( texto )
navegador. find_elements_by_partial_link_text ( texto )
<a> elementos que contienen el texto proporcionado
navegador. buscador de find_element_by_name ( nombre )
find_elements_by_name ( nombre )
Elementos con un valor de atributo de nombre coincidente
navegador. find_element_by_tag_name ( nombre )
navegador. find_elements_by_tag_name ( nombre )
Elementos con un nombre de etiqueta coincidente (no distingue entre mayúsculas y minúsculas; un elemento <a> se corresponde con 'a' y 'A'
navegador. find_element_by_xpath (( xpath )
navegador. find_elements_by_xpath (( xpath )
Elementos que tienen el xpath.

Localizar una entrada de texto

Ya sabemos cómo iniciar un navegador web y visitar el sitio web de un motor de búsqueda. Ahora veamos cómo seleccionar la entrada de texto en la página. Hay muchas formas de seleccionar el elemento en la página, y quizás la más fácil y precisa es usar XPath. Primero, necesita usar las herramientas de desarrollo en su navegador para encontrar el XPath que usar.

cómo encontrar xpath del elemento del navegador

Al seleccionar Copiar Xpath, obtenemos este valor.

// * [@ id = "search_form_input_homepage"]

Podemos usarlo en nuestro programa ahora y cuando ejecutamos el programa, vemos que imprimir el elemento resultante nos muestra que es un FirefoxWebElement, por lo que ubicar la entrada de texto en la página fue un éxito.

<selenium.webdriver.firefox.webelement.FirefoxWebElement (session = "1302c443-53b9-4b4d-9354-bc93c9d5d7ba", element = "bb944d54-6f29-479a-98af-69a70b0a41a1")>

Escribir en una entrada de texto

Una vez que se encuentra una entrada de texto, el programa puede escribir texto en la entrada. Para hacer esto, se usa el método .send_keys () .

método send_keys de selenio

Cómo presionar la tecla Enter

Una vez que ubique una entrada de texto y escriba algo de texto en ella, ¿cuál suele ser el siguiente paso? Así es, debe presionar la tecla Enter para que suceda algo. Esto también se puede lograr con el método .send_keys () , pero también debe importar el módulo Keys en Selenium. Así es como lo hacemos. Tenga en cuenta que una vez que se presiona la tecla Enter, el sitio web devuelve una lista de resultados, ¡todo de nuestro script de Python!

selenio ingrese el texto y presione enter


Ejemplos de prácticas fáciles de selenio

El sitio web de Selenium Easy tiene un campo de pruebas que podemos usar para probar algunas tareas más comunes de selenio. A continuación se muestra un ejemplo de una entrada de texto con un botón asociado. Podemos escribir en el campo de texto y luego hacer clic en el botón para mostrar un mensaje. Usaremos selenium para escribir un script de Python para completar esta tarea.

selenio seleccionar entrada de texto haga clic en el botón

Aquí está el código para esta prueba. Usaremos el método .find_element_by_id () para ubicar la entrada de texto y el método .find_element_by_xpath () para ubicar el botón. También podemos usar .send_keys () para completar la entrada de texto y el método .click () para hacer clic en el botón.

Después de ejecutar la prueba, vemos que el navegador ha realizado con éxito las acciones que programamos. Se ingresó el texto, se hizo clic en el botón y se mostró el mensaje.

éxito de caso de texto de selenio

Atributos y métodos de WebElement

Esto nos lleva a una discusión de los atributos y métodos de los elementos web. Una vez que se selecciona un elemento a través de selenio y se asigna a una variable, esa variable ahora tiene atributos y métodos que podemos usar para tomar medidas mediante programación. Así es como podemos usar cosas como .send_keys () y .click (). Aquí hay una lista de algunos de los WebElements más utilizados.


element.send_keys ()

Simula escribir en el elemento.

Args
-value: una cadena para escribir o configurar campos de formulario. Para configurar entradas de archivo, esta podría ser una ruta de archivo local.

Use esto para enviar eventos clave simples o para completar campos de formulario

Esto también se puede utilizar para configurar entradas de archivos.


element.click ()

Hace clic en el elemento seleccionado.


element.submit ()

Envía un formulario.


element.get_attribute ()

Obtiene el atributo o la propiedad especificados del elemento.

Este método primero intentará devolver el valor de una propiedad con el nombre dado. Si una propiedad con ese nombre no existe, devuelve el valor del atributo con el mismo nombre. Si no hay ningún atributo con ese nombre, se devuelve Ninguno.

Los valores que se consideran verdaderos, es decir, "verdadero" o "falso", se devuelven como valores booleanos. Todos los demás valores que no sean Ninguno se devuelven como cadenas. Para atributos o propiedades que no existen, se devuelve Ninguno.

Args
- name - Nombre del atributo / propiedad a recuperar.

Ejemplo


element.clear ()

Borra el texto si es un elemento de entrada de texto.


element.get_property ()

Obtiene la propiedad dada del elemento.

Args
- name: nombre de la propiedad a recuperar.

Ejemplo


element.is_displayed ()

Si el elemento es visible para un usuario.


element.is_enabled ()

Devuelve si el elemento está habilitado.


element.is_selected ()

Devuelve si el elemento está seleccionado. Se puede utilizar para comprobar si se ha seleccionado una casilla de verificación o un botón de opción.


elemento de texto

El texto dentro del elemento, como "hola" en <span> hola </span>


element.id

La identificación de la etiqueta.


element.tag_name

El nombre de la etiqueta, como "li" para un elemento <li>


Dos entradas y un clic de botón

Aquí hay otro ejemplo del sitio web de selenium easy. En este ejercicio, queremos crear un script de Python que use selenio para ingresar un valor para dos campos de entrada distintos, luego haga clic en un botón en la página para operar con los valores ingresados ​​en los dos campos de entrada.

dos entradas con selenium python

Para la solución a esta prueba, ejecutaremos Firefox en modo sin cabeza. Usaremos selenio para ingresar un número en la entrada uno y dos, luego haga clic en un botón para sumar los dos. Por último, usaremos selenio para encontrar el resultado en la página y lo imprimiremos en el script de Python. Si los números se suman a lo que esperamos, entonces sabemos que la prueba funcionó, no es necesario iniciar un navegador. Cuando se ejecuta el script, vemos el resultado de 17. Entonces sabemos que funcionó ya que esperaríamos que 10 + 7 = 17.

17

Arrastrar y soltar con ActionChains

Se pueden realizar muchas cosas con Selenium usando una sola función. Como tal, veremos un ejemplo un poco más desafiante de arrastrar y soltar en Selenium. Arrastrar y soltar tiene tres pasos básicos. Primero, se debe seleccionar un objeto o texto. Luego se debe arrastrar al área deseada y finalmente colocarlo en su lugar. Para demostrar esto en Python, usaremos esta página web dhtmlgoodies, que actuará como un campo de práctica para nuestro script. El marcado en el que trabajaremos se ve así.

ejemplo de arrastrar y soltar selenio

Para implementar un arrastrar y soltar en Selenium, tenemos que agregar la biblioteca ActionChains. Las cadenas de acción extienden Selenium al permitir que el controlador web realice tareas más complejas como arrastrar y soltar. Cuando se llaman métodos para realizar acciones en los objetos ActionChains, las acciones se almacenan en una cola. Luego llamamos al método .drag_and_drop () pasando el origen y el destino. Finalmente, el método .perform () se llama como una cadena de métodos para ejecutar la acción. Veamos esto en acción.

éxito de arrastrar y soltar selenio


Hacer clic en los botones del navegador

Selenium también puede simular clics en varios botones del navegador mediante los siguientes métodos:

  • browser.back ()  Hace clic en el botón Atrás.
  • browser.forward ()  Hace clic en el botón Adelante.
  • browser.refresh ()  Hace clic en el botón Actualizar / Recargar.
  • browser.quit ()  Hace clic en el botón Cerrar ventana.

Aplicación de ejemplo: Comprobador de cotización de acciones

Ahora podemos juntar todo lo que hemos aprendido sobre Selenium y Python trabajando juntos para crear una aplicación simple que le permite ingresar un símbolo de cotización en su programa, y ​​obtendrá y le devolverá la cotización actual. Este proceso se coloca en un bucle, lo que permite al usuario continuar ingresando tickers y obtener una cotización. Para finalizar el programa, el usuario puede simplemente escribir la letra 'q' para salir del programa. Aquí está el código y algunos resultados de muestra de buscar algunos tickers como spy, aapl y tsla. También tenga en cuenta que usamos el módulo de tiempo para agregar algunos tiempos de espera, de lo contrario, el programa podría fallar si la página web remota no se carga a tiempo.

¿Qué ticker quieres buscar? (q para salir) espiar
espía es actualmente 283.71
¿Qué ticker quieres buscar? (q para salir) aapl
aapl es actualmente 287.26
¿Qué ticker quieres buscar? (q para salir) tsla
tsla es actualmente 736.51
¿Qué ticker quieres buscar? (q para salir) q

Proceso terminado con código de salida 0

Funciones de espera de selenio

El selenio tiene algo que se conoce como funciones de esperaLas funciones de espera existen porque los sitios web modernos a menudo usan técnicas asincrónicas como AJAX para actualizar partes de la página web sin recargas. Esto proporciona una gran experiencia de usuario, pero a veces el controlador Selenium puede tener problemas si intenta ubicar un elemento en la página antes de que se cargue. Esto generará una excepción en el script y nuestro programa no funcionará correctamente. Las funciones de espera ayudan con esto al agregar intervalos de tiempo entre las acciones realizadas, lo que permite que el controlador web espere hasta que se cargue un elemento antes de interactuar con él. Selenium ofrece dos tipos de esperas, explícitas e implícitas. Las esperas explícitas, cuando se combinan con una condición, esperarán hasta que se cumpla esa condición antes de ejecutarse. En cambio, las esperas implícitas intentarán sondear el DOM durante un cierto período de tiempo hasta que el elemento esté disponible.

Un ejemplo del uso de una función de espera

Para comenzar a usar una espera en Selenium, necesitamos importar algunos módulos necesarios. Por supuesto, necesitamos el módulo webdriver para comenzar. Luego importamos tres nuevos módulos y esos son By, WebDriverWait ypected_conditions. Usamos un alias para hacer referencia a las condiciones esperadas como EC para facilitar la escritura del código.

La página que vamos a demostrar usando una espera de Selenium está en Google Earth. Si visita Google Earth, puede ver que la barra de navegación superior se carga un poco más tarde que el resto de la página. Si Selenium intentara localizar un enlace en la barra de navegación y hacer clic de inmediato, fallaría. Este es un buen ejemplo de cuándo podemos usar una espera de Selenium para que el script funcione correctamente, incluso cuando un fragmento de la página tiene un ligero retraso en la carga.

usando espera para contenido dinámico selenio

El código anterior hace uso de una espera explícita usando WebDriverWaitfunción. Esta función lanzará una excepción después de 10 segundos (el número especificado como argumento 2) si no se cumple la condición que hacemos. A continuación, creamos una condición para la espera explícita. Para implementar esto, lo comparamos con el módulo de condiciones esperadas para hacer que el programa espere hasta que se pueda completar una acción específica. El código anterior le dice al programa que espere hasta que se pueda hacer clic en el botón de inicio de la Tierra en el navegador. Simplemente usamos el XPath del botón e implementamos esta idea. Continúe e inspeccione el botón. La línea de código justo antes del clic dice que espere hasta que se pueda hacer clic en ese botón antes de seguir adelante con el clic. En uno de los otros ejemplos de este tutorial, usamos la función sleep () de Python para hacer algo similar. El uso de una función de espera de Selenium es un poco más detallado en el código,


Resumen del tutorial de Selenium Python

En este tutorial, vimos cómo automatizar completamente las tareas basadas en la web controlando directamente un navegador web a través del código Python con la biblioteca Selenium. Selenium es bastante poderoso y le permite completar cualquier tarea que de otra manera haría manualmente en un navegador web, como visitar varias URL, completar formularios, hacer clic en elementos de la página, usar arrastrar y soltar, y más. El navegador web es quizás la pieza de software más utilizada en la era de la conexión a Internet, y ser capaz de automatizar y aprovechar esto en el código es una gran habilidad.