Selenium
Last updated
Last updated
Selenium es una herramienta de automatizaciΓ³n de pruebas y scrapeo web que permite controlar y manipular navegadores web de forma programΓ‘tica. Permite simular interacciones humanas en una pΓ‘gina web, automatizar pruebas funcionales, extraer datos y realizar tareas repetitivas en aplicaciones web, todo a travΓ©s de su API fΓ‘cil de usar y soporte para varios navegadores.
Su instalacion es muy sencilla tansolo tienes que instalarlo con pip insatall
y despues instalar el Driver que desees utilzar. Aqui tienes una guia
El webdriver de Selenium es una herramienta popular y potente para la automatizaciΓ³n de pruebas y el scrapeo web. Permite controlar un navegador web real o un navegador en modo headless para interactuar con pΓ‘ginas web, realizar acciones y extraer datos de manera programΓ‘tica.
Para poder utilizarlo una vez lo hayamos instalado, tan solo tenemos que instanciarlo en nuestro script:
Con este codido establecemos que vamos a utilizar el driver de google chrome que esta en el directorio actual y mediante ese driver abriremos en el navegador la pagina duckduckgo.com
. Una vez abierto lo cerraremos con driver.close()
. Esto es necesario si no se llenara la memoria.
Sin embargo hay una manera mas eficiente inicializar el webdriver sin tener que especifcar la ruta del driver:
En ete ejemplo estamos utilizando la funcion which
de la libreria shutil
para bsucar el drive de crome ya que esta funcion sirve para buscar la ruta de un archivo ejecutable en el sistema operativo.
La opciΓ³n headless
en Selenium se utiliza para ejecutar el navegador en modo sin interfaz grΓ‘fica. Es una buena prΓ‘ctica usar esta opciΓ³n en la automatizaciΓ³n de pruebas y otras tareas donde no se requiere ver el navegador. Proporciona beneficios como mayor eficiencia, rendimiento y escalabilidad al eliminar la necesidad de mostrar la interfaz grΓ‘fica.
Para implemntarlo tan solohay que hacer lo siguiente:
En Selenium, la bΓΊsqueda y manipulaciΓ³n de elementos en una pΓ‘gina web es una parte fundamental de la automatizaciΓ³n de pruebas y el scrapeo web. En este artΓculo, exploraremos las distintas maneras de buscar elementos con Selenium y cΓ³mo utilizar los mΓ©todos adecuados para acceder y manipularlos.
La bΓΊsqueda por ID es una forma comΓΊn y eficiente de localizar elementos en una pΓ‘gina web. Utiliza el mΓ©todo find_element_by_id
para buscar un elemento especΓfico por su ID ΓΊnico. AquΓ tienes un ejemplo:
Otra manera de buscar elementos es por el nombre de etiqueta HTML. Utiliza el mΓ©todo find_element_by_tag_name
para buscar un elemento por su nombre de etiqueta. Por ejemplo:
Puedes buscar elementos por su clase utilizando el mΓ©todo find_element_by_class_name
. Este mΓ©todo devuelve el primer elemento que coincide con la clase especificada. AquΓ tienes un ejemplo:
Selenium tambiΓ©n permite buscar elementos utilizando selectores CSS. Utiliza el mΓ©todo find_element_by_css_selector
para buscar elementos que coincidan con un selector CSS especΓfico. Por ejemplo:
Mientras que la bΓΊsqueda por clase se limita a buscar elementos por su clase CSS exacta, los selectores CSS permiten especificar condiciones adicionales y jerarquΓas mΓ‘s complejas para encontrar elementos especΓficos
XPath es otra forma poderosa de buscar elementos en una pΓ‘gina web. Utiliza el mΓ©todo find_element_by_xpath
para buscar elementos que coincidan con una expresiΓ³n XPath especΓfica. AquΓ tienes un ejemplo:
En Selenium, la interacciΓ³n con elementos de una pΓ‘gina web es fundamental para realizar tareas automatizadas y pruebas funcionales. En este artΓculo, exploraremos las distintas acciones que se pueden realizar sobre un elemento utilizando Selenium, como enviar texto, hacer clic, obtener atributos y mΓ‘s.
Enviar texto a un elemento es una acciΓ³n comΓΊn en la automatizaciΓ³n de pruebas y el scrapeo web. Utiliza el mΓ©todo send_keys
para ingresar texto en un campo de entrada. AquΓ tienes un ejemplo:
En este caso, el mΓ©todo send_keys
se utiliza para ingresar el texto "Texto de ejemplo" en el elemento identificado por su ID ΓΊnico.
Hacer clic en un elemento es una acciΓ³n comΓΊn para interactuar con enlaces, botones u otros elementos interactivos. Utiliza el mΓ©todo click
para simular un clic en un elemento. AquΓ tienes un ejemplo:
En este ejemplo, el mΓ©todo click
se utiliza para hacer clic en el elemento con la clase CSS "my-button".
Puedes obtener atributos especΓficos de un elemento utilizando el mΓ©todo get_attribute
. Esto es ΓΊtil para extraer informaciΓ³n relevante de elementos, como URLs de imΓ‘genes o valores de atributos personalizados. AquΓ tienes un ejemplo:
En este caso, se utiliza el mΓ©todo get_attribute
para obtener el valor del atributo "src" del elemento de imagen.
Para obtener el texto visible de un elemento, puedes utilizar el atributo text
o el mΓ©todo get_text
. AquΓ tienes un ejemplo:
En este ejemplo, se utiliza el atributo text
para obtener el texto visible del elemento con la clase CSS "my-element".
A veces, es necesario esperar a que un elemento estΓ© visible antes de interactuar con Γ©l. Utiliza el mΓ©todo WebDriverWait
junto con las condiciones de espera predefinidas, como visibility_of_element_located
, para esperar a que un elemento estΓ© visible. Por ejemplo:
En este ejemplo, se utiliza WebDriverWait
junto con la condiciΓ³n visibility_of_element_located
para esperar hasta que el elemento con el ID "my-element-id" estΓ© visible.
Si deseas borrar el contenido de un campo de entrada antes de enviar nuevo texto, puedes utilizar el mΓ©todo clear
. AquΓ tienes un ejemplo:
En este caso, el mΓ©todo clear
se utiliza para borrar el contenido del campo de entrada identificado por su ID ΓΊnico.
Selenium tambiΓ©n permite simular acciones de teclado, como pulsar teclas especiales o realizar combinaciones de teclas. Puedes utilizar la clase Keys
para enviar teclas especΓficas. AquΓ tienes un ejemplo:
En este ejemplo, se envΓa la tecla "Enter" al elemento y se realiza la combinaciΓ³n de teclas "Control + a" para seleccionar todo el texto en un campo de entrada.
Scrapy-Selenium es una extensiΓ³n de Scrapy que combina Selenium y Scrapy para el scrapeo de sitios web dinΓ‘micos. Permite interactuar con JavaScript y extraer datos de manera eficiente. Con Scrapy-Selenium, obtienes lo mejor de ambos mundos: la potencia de Selenium y las capacidades avanzadas de scrapeo de Scrapy. Es ideal para scrapear sitios web complejos.
Para empezar necesitas instalar la libreria scrapy-splash
con el siguiente comando:
A continuaciΓ³n, para integrar scrapy-selenium en el proyecto hay que actualiar el archivo settings.py con la siguiente configuraciΓ³n si usa un controlador de Chrome:
O estas configuraciones si usa un controlador FireFox:
Para implementar cΓ³digo de Selenium en un spider de Scrapy utilizando scrapy-selenium
, puedes utilizar el objeto self.browser
o response.meta['driver']
proporcionado por la extensiΓ³n. AquΓ tienes un ejemplo:
Una vez hays realizado todas las acciones que dees con selenium puede qe el codigo fuente hay cambaido. De ser asi ahora las acciones de scrappy no podremos realizarlas sobre request
si no sobre un nuevo codigo fuente proprocionado por selenium. Esto se hace de la sigueinte manera: