Selenium[1] - Funciones Basicas

Selenium - Funciones Básicas

La semana pasada vimos qué es Selenium, para qué se usa y cómo instalarlo. Ahora, vamos a ver cómo usarlo junto a unos ejemplos.

Importando Selenium

Cuando vayamos a trabajar con Selenium debemos importar a nuestro Script las siguientes clases:

  • webdriver: Esta clase nos permite instanciar el navegador Web y interactuar con el.
  • Keys: Nos proporciona una serie de herramientas para interactuar con la página Web como si usasemos el teclado.

Veamos un ejemplo: este es el cuerpo básico para trabajar con Selenium:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox() # Implementamos como navegador Firefox. Por otra parte, Selenium nos permite instanciar también con Chrome, IE, Opera...
driver.get("frog-zone.com") # Le pasamos al Webdriver la URL que vamos a consultar.

driver.close() # Importante cerrar el Webdriver para evitarnos errores.

Para probarlo: abrir el blog de notas o vuestro IDE favorito, pegar el código y guardar con extensión .py. Yo lo he guardado como import_selenium.py

Para ejecutarlo en Linux vamos al terminal y ejecutamos el siguiente comando:

 

sudo py import_selenium.py # Podeis cambiar import_selenium.py por el nombre que habeis usado.

En Windows con hacer doble click en el archivo se ejecuta pero, uno de los problemas de Windows es que al finalizar la ejecución se cierra y no podemos ver resultados. Vamos a realizar una modificación a nuestro archivo base para que esto no ocurra:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import msvcrt # Importamos esta clase que nos da acceso a funciones especiales para Windows

driver = webdriver.Firefox()
driver.get("frog-zone.com")

msvcrt.getch() # Este comando espera una entrada de teclado para continuar la ejecución.
driver.close() 

Navegando entre elementos.

El Webdriver nos proporciona una serie de métodos para localizar un elemento dentro de la página Web:

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector

Los dos métodos que, personalmente, más uso son: find_element_by_id y find_element_by_xpath; ya que nos proporcionan una búsqueda más exacta del elemento sin problemas de duplicidad. Empecemos por un ejemplo de find_element_by_id:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import msvcrt

driver = webdriver.Firefox() 
driver.get("frog-zone.com") 

articulo = driver.find_element_by_id("node-81") # Localizamos el elemento (Este artículo) y nos guardamos la referencia.
articulo.click() # Ejecutamos el metodo click y ¡voilà!

msvcrt.getch() 
driver.close() 

Como habéis comprobado se abre el navegador en frog-zone.com, se selecciona el elemento por ID( en este caso es la imagen del primer artículo), el Webdriver ejecuta el método click sobre el elemento guardado y abre este articulo.

Cuando queremos localizar un elemento que no tiene id, una clase o un nombre, podemos usar el método find_element_by_xpath que nos permite localizar los elementos mediante su XPath. Por suerte, tanto Google Chrome con sus herramientas para desarrolladores como Firefox con Firebug, nos proporcionan la ruta Xpath de los elementos.

Cómo obtener el Xpath de un elemento en Google Chrome:

  1. Hacemos click derecho sobre el elemento.
  2. En el menú contextual "Insperccionar".
  3. Se abren las Herramientas para Desarrolladores sombreando la línea del elemento.
  4. Volvemos a hacer click derecho sobre la línea sombreada.
  5. Abrimos el submenu "Copy" y seleccionamos "Copy XPath".

 

¡Ya tenemos la ruta XPath del elemento "//*[@id="node-81"]/div[2]/div/div/p[2]",! Vamos a usarla para obtener el texto del elemento con la propiedad .text

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import msvcrt

driver = webdriver.Firefox()
driver.get("frog-zone.com") 

articulo = driver.find_element_by_xpath('//*[@id="node-81"]/div[2]/div/div/p[2]') # Usamos la Ruta XPath del elemento para buscarlo.
print(articulo.text) # Mostramos el texto usando la propiedad .text del elemento.

msvcrt.getch() 
driver.close() 

En esta ocasión podéis comprobar que el Webdriver busca el elemento por su XPath y lo almacena en la variable artículo. Seguidamente, extraemos el contenido de tipo texto con la propiedad .text

Hagamos un repaso de lo visto hasta el momento: Hemos instalado Python y Selenium, importado el Webdriver a nuestro Script y usado los metodos .find_element_by_id y .find_element_by_xpath para localizar elementos dentro de la página Web. A su vez, hemos usado el método .click() y la propiedad .text para interactuar con la misma.

Con esto deberíamos ser capaces de empezar a trabajar con Selenium pero aún, quedan unas cuantas cosas interesantes por ver antes de convertirnos en expertos. La semana que viene vamos a usar los métodos .find_elements_by_x para localizar una lista de elementos y almacenarlos en un array. También, vamos a aprender cómo obtener tanto el elemento padre como elementos hijos.

Añadir nuevo comentario