Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Inicio → Blogs → Cambiando el mundo → Trucos y tretas en Excel VBA para programadores - Automatizar navegacion web con Selenium Wrapper 1.0.23.0
Índice
Instalación de Selenium
Nomenclatura
Declaraciones
Lanzar aplicación
Fijar espera
Digitar datos
Cantidad de opciones
Seleccionar opción
Moverse a un frame
Errores comunes
Corolario
Acceder
Si eres de los que tiene que repetir tareas en aplicaciones web una, y otra, y otra vez, un trabajo que no es ine ciente realizarlo
manualmente, sino inhumano, tal vez quieras crear una macro en Excel VBA que te permita navegar de manera automática. Esta
vez hablaré de Selenium 1.0.23.0.
Asumo que ya te leiste mi post anterior sobre twebst, y que dominas el tema de "nodos" y "xpath" de XML. Si no lo has hecho,
puedes ingresar aquí.
ADVERTENCIA!!
Como puedes notar Selenium Wrapper y Selenium Basic son totalmente distintos y el código de uno es muy distinto al código de otro. Selenium
Wrapper fue un proyecto que estaba hospedado en Google, mientras que Selenium Basic es el mismo proyecto que se ha mudado a otro sitio.
Ambos son add-ons que sirven para escribir código para Excel VBA.
Puedes descargar Selenium Basic en el sitio web correspondiente. Aporto este enlace para tu información únicamente.
Parece haber versiones posteriores de Selenium Wrapper en SeleniumHQ pero no estoy seguro de la compatibilidad con este tutorial.
Instalación de Selenium
Antes de poder usar Selenium en Excel, hay que descargarlo e instalarlo(solía estar hospedado en Selenium webpage). Usa la versión
1.0.23.0 si deseas usar este post como tutorial.
Para cada libro con macros donde vayas a escribir código de Selenium, debes seguir estos pasos una única vez.
Nomenclatura
Cuando usas Selenium para automatizar, encontrarás que el código en muchos tutoriales está en Java, y la traducción a VBA no es
literal. Trataré un poco de lo básico de Selenium en VBA.
Los localizadores sirven para ubicar un nodo, y puedes usarlo según el tipo de nodo de que se trate.
Acceder
Hay varias maneras de accederles, de dar la dirección de un nodo para ser usado por Selenium:
Yo pre ero usar Xpath para dar direcciones de nodos. Puedes ver ejemplos de uso de localizadores en el sitio web de Selenium.
Declaraciones
Lanzar aplicación
sURL1 es el dominio.
Chrome es el navegador que elegí para este ejemplo.
selenium.Open sURL2
Fijar espera
selenium.wait 1000
Si quieres saber cual es la dirección actual, porque a veces hay redireccionamientos, o quieres veri car que la carga tuvo éxito,
puedes usar esto.
URL = selenium.url
Digitar datos
selenium.Click sLocalizador
Si tienes una tabla con múltiples las, el nodo tbody es la tabla y tienes muchos nodos tr (table row) o si tienes un control
dropdown (lista desplegable) con muchas opciones, no puedes usar directamente el control, sino que debes seleccionarlo primero
antes de ser usado. A los elementos múltiples de la tabla o dropdown, les llamaré opciones. Veamos distintas maneras de
seleccionar el elemento. Puedes usar la manera que se te antoje.
Luego debes trabajar con las opciones. No olvides en alguna variable mantener el nombre del elemento activo que seleccionaste
(nombre, id, clase o xpath) para uso futuro. En este ejemplo usaré un Xpath.
ElementoActivo = "//*/body/div/div/div/form/div/div/div/table/tbody"
Cantidad de opciones
TextoDeOpcionSeleccionada = elemento.AsSelect.SelectedOption.Text
Seleccionar opción
OpcionSeleccionada = 2
elemento.AsSelect.selectByIndex (Val(OpcionSeleccionada))
Si tienes un campo de datos en el sitio web, tal como una fecha o un monto o un nombre, sólo debemos indicar el Xpath (variable
sXpath en este ejemplo, "s" en el nombre de la variable indica que la variable es de tipo String) para indicar qué nodo debe usarse.
En este ejemplo obtenemos el Xpath de la la (tr = table row). Ponemos a Selenium a contar.
sXpath = "//*[@class='mitabla']/tbody/tr"
CantidadDeFilas = selenium.findElements(by.XPath(sXpath)).count
Brinda un valor boolean (falso/verdadero). Sirve para veri car que un nodo existe. Por ejemplo, si el botón on existe, al tratar de
pincharlo, obtendrás error.
ExisteElemento = selenium.isElementPresent(by.XPath(sXpath))
Acceder
selenium.actions.contextClick(selenium.findElementByXPath(sXpath)).perform
selenium.findElement(by.XPath(sXpath)).SendKeys Keys.Enter
TextoEnLaPagina = selenium.getBodyText
Moverse a un frame
selenium.SwitchToFrame selenium.findElement(by.XPath(XpathDelFrame))
selenium.findElement(by.XPath(XpathDelCampoDondeVaNombreDeArchivo)).SendKeys (RutaCompleta)
Errores comunes
Conexión lenta o tiempo de espera bajo, al terminar el tiempo de espera no ha cargado lo que deseas cargar.
Redireccionamientos cuando las páginas te dicen que expiró, cuando no estabas logeado al sitio web, etc. Lo que tu código
encuentra no es lo que se supone que debe encontrar.
Elementos (controles) no encontrados, o inahbilitados. Sería bueno veri car que los elementos están presentes y habilitados.
Direccionamiento a nodos incorrectos. Para ello es util grabar script en Twebst si quieres veri car que estás haciendo
referencia a los nodos correctos.
Error al seleccionar un nodo con múltiples elementos sin éxito y luego tratas de trabajar sobre sus opciones.
Los Xpath no son iguales para distintos usuarios. De acuerdo con los privilegios o con guración que tengan los usuarios, puede
que los Xpath o el orden o cantidad de opciones que funcionaban para un usuario, no sirvan para otro. Cuando esto sucede, es
un verdadero dolor de cabeza.
Muchas veces la parte difícil de programar con Selenium puede ser la obtención de los Xpath y lidiar con conductas de la página
web.
Aunque suene simple usar Selenium, a veces te costará solucionar algunos problemas. He aquí algunos trucos.
Chrome a veces tiene problemas para darte los Xpath correctos, de modo que si no funciona, trata de obtener la ruta Xpath
absoluta de manera manual. Por ejemplo, en lugar de //*[@class='mitabla']/tbody/tr querrías usar
//html/body/div/div/div/form/div/div/div/table/tbody/tr. También puedes ayudarte grabando scripts de Twebst para ver si estás
usando los Xpath correctos.
Cuando tienes controles donde debes hacer "mouse hover" o pinchar una region de pantalla para que aparezca una lista
Acceder
desplegable, la respuesta no es nada obvia. Chrome te dará el Xpath del control a pinchar, pero con Twebst puedes obtener el
nombre del nodo del dropdown. En realidad tienes dos nodos, uno para pinchar, y otro para seleccionar una opción, de modo
que tendrás 3 pasos:
El problema se complica aún más si el "mouse hover" no responde si tienes el cursor del mouse encima del browser, de modo
que vas a tener que moverlo manualmente o buscar en Google cómo se mueve con código.
Si estabas automatizando navegación en Sharepoint para Chrome y tienes problemas con Silverlight, porque Chrome ya no
soporta NPAPI, sólo debes modi car tu URL. Mientras que la galería de Sharepoint sí apunta al uso de Silverlight, hay otra vista
con URL distinto que no lo usa. Veamos este ejemplo hipotético.
Corolario
En muchas empresas pasar información de una aplicación web a otra suele ser una tarea muy aburrida, pesada, ine ciente y que
no agrega valor. Con Selenium se puede automatizar este tipo de procesos. Se dice que existen complementos para grabar
scripts de Selenium, pero no hay como hacer uno mismo el código. Cuando se trata de pasos a seguir, se puede grabar, pero
cuando se necesita recoger información y reaccionar y tomar decisiones ante los valores encontrados, los scripts grabados
pierden cierta utilidad.
Suscribirme al blog
Economía VBA
Compartir en
Lecturas relacionadas
Acceder
Trucos y tretas en Excel VBA para programadores - Trucos y tretas en Excel VBA para programadores
Automatizar navegacion web con Twebst
Hola estimados. Quisiera saber si conoce una forma de hacer referencia a la libreria de selenium sin instalar
solo bajando la carpeta que esta en la pagina.
Nuevo
#1
Octavohokage
Seguir
17/11/18 16:50
Responder
Acceder
Te puede interesar...
Más recomendado Más leído
Copyright © 2003 - 2021 Rankia S.L. Aviso legal · Política de privacidad · Política de cookies · Contacta con nosotros · Quiénes
somos