From eve.titol at gmail.com Sat Aug 10 22:55:40 2013 From: eve.titol at gmail.com (eve tito) Date: Sun, 11 Aug 2013 01:25:40 -0430 Subject: [caracas-pm] =?utf-8?q?Automatizaci=C3=B3n_de_autenticaci=C3=B3n?= Message-ID: Hola buenas noches, estoy haciendo un "robot" en Perl para que haga lo siiguiente: - abrir el iexplorer en un URL determinado - ese URL abre un popup de autenticaci?n en el que debo llenar 3 campos - Una vez autenticado aparece una p?gina con diversos elementos html, checkbox, botones, etc., el robot debe pulsar ciertas opciones en esos controles y pulsar un bot?n "aceptar". De ?stos pasos he logrado que se abra el iexplorer a trav?s de los m?dulos que menciono a continuaci?n, pero se me tranc? el serrucho en la parte de la autenticaci?n, hab?a mandado la pregunta a l-desarrollo de velug pero no sab?a de los inconvenientes que presentaba. Aqu? est? el texto de mi consulta original. (GRACIAS por su ayuda!) Estoy investigando un c?digo para un robot que abra el IExplorer en una p?gina determinada y haga login autom?tico en ella, la p?gina al abrirse muestra un popup en el cual se deben colocar 3 datos en las casillas que son del login. Estuve viendo ?ste m?dulo: http://search.cpan.org/~prashant/Win32-IEAutomation-0.4/lib/Win32/IEAutomation.pm y vi la secci?n: POPUP METHOD Al ver el m?todo: $ie->getPopupWindow("Popup One"); # access the popup window whose title is "Popup One" indica que debe coloc?rsele el nombre del popup que est? activo, pero realmente no s? cu?l es el nombre del popup, tampoco s? los nombres de los text box. ?Hay alguna manera de explorar/barrer el popup abierto y obtener sus caracter?sticas y las de los objetos que est?n alli? He visto tambi?n ?ste m?dulo: http://search.cpan.org/dist/Win32-OLE/lib/Win32/OLE/TPJ.pod#METHOD_CALLS En su m?todo: my $IEWin = Win32::OLE->GetActiveObject(" InternetExplorer.Application"); pero veo que me dice de objetos (aplicaciones) activas pero no s? si me da los objetos y nombres de los diferentes elementos y de las ventanas activas... Gracias! -------------- next part -------------- An HTML attachment was scrubbed... URL: From amijaresp at gmail.com Sat Aug 10 23:23:29 2013 From: amijaresp at gmail.com (Alberto Mijares) Date: Sun, 11 Aug 2013 01:53:29 -0430 Subject: [caracas-pm] =?utf-8?q?Automatizaci=C3=B3n_de_autenticaci=C3=B3n?= In-Reply-To: References: Message-ID: Hola eve, No tengo la respuesta exacta a tus preguntas pero casualmente estoy escribiendo un scraper en este momento. Yo estoy usando WWW::Mechanize::Firefox para poder manejar sin problemas el JavaScript. Si no es "requerido" que uses IExplorer, te recomiendo que uses ese m?dulo. Luego ver?s que con el m?todo application() tienes la posibilidad de cambiarte de ventanas y de tabs. Espero te sirva y menos mal que escribiste porque tambi?n tengo una duda y como l-desarrollo est? down ser? que pregunte por aqu?. Saludos Alberto Mijares 2013/8/11 eve tito : > Hola buenas noches, > > estoy haciendo un "robot" en Perl para que haga lo siiguiente: > > - abrir el iexplorer en un URL determinado > - ese URL abre un popup de autenticaci?n en el que debo llenar 3 campos > - Una vez autenticado aparece una p?gina con diversos elementos html, > checkbox, botones, etc., el robot debe pulsar ciertas opciones en esos > controles y pulsar un bot?n "aceptar". > > De ?stos pasos he logrado que se abra el iexplorer a trav?s de los m?dulos > que menciono a continuaci?n, pero se me tranc? el serrucho en la parte de la > autenticaci?n, hab?a mandado la pregunta a l-desarrollo de velug pero no > sab?a de los inconvenientes que presentaba. Aqu? est? el texto de mi > consulta original. (GRACIAS por su ayuda!) > > > Estoy investigando un c?digo para un robot que abra el IExplorer en una > p?gina determinada y haga login autom?tico en ella, la p?gina al > abrirse muestra un popup en el cual se deben colocar 3 datos en las > casillas que son del login. Estuve viendo ?ste m?dulo: > http://search.cpan.org/~prashant/Win32-IEAutomation-0.4/lib/Win32/IEAutomation.pm > y vi la secci?n: POPUP METHOD > > Al ver el m?todo: > > $ie->getPopupWindow("Popup One"); # access the popup window > whose title is "Popup One" > > indica que debe coloc?rsele el nombre del popup que est? activo, > pero realmente no s? cu?l es el nombre del popup, tampoco s? los > nombres de los text box. ?Hay alguna manera de explorar/barrer el > popup abierto y obtener sus caracter?sticas y las de los objetos que > est?n alli? > > > He visto tambi?n ?ste m?dulo: > http://search.cpan.org/dist/Win32-OLE/lib/Win32/OLE/TPJ.pod#METHOD_CALLS > > En su m?todo: my $IEWin = > Win32::OLE->GetActiveObject(" > InternetExplorer.Application"); pero veo > que me dice de objetos (aplicaciones) activas pero no s? si me da los > objetos y nombres de los diferentes elementos y de las > ventanas activas... > > > Gracias! > > _______________________________________________ > caracas-pm mailing list > caracas-pm at pm.org > http://mail.pm.org/mailman/listinfo/caracas-pm From amijaresp at gmail.com Sat Aug 10 23:28:26 2013 From: amijaresp at gmail.com (Alberto Mijares) Date: Sun, 11 Aug 2013 01:58:26 -0430 Subject: [caracas-pm] Leer resultados AJAX desde Mech Message-ID: Hola lista: Estoy escribiendo un scraper en perl con WWW::Mechanize::Firefox. Todo va bien hasta que me encuentro un formulario con AJAX. Los posibles valores del primer campo los puedo leer directamente desde el HTML, pero los valores del segundo dependen de la selecci?n del primero, y los del tercero del segundo. Entonces, logro seleccionar un valor para el primer campo y efectivamente se activa el segundo campo con la lista de posibles valores, lo que no he logrado es leer esa lista de valores. ?Alguna idea? Gracias de antemano. Saludos Alberto Mijares From ait at p2ee.org Sun Aug 11 11:00:17 2013 From: ait at p2ee.org (Alejandro Imass) Date: Sun, 11 Aug 2013 14:00:17 -0400 Subject: [caracas-pm] Leer resultados AJAX desde Mech In-Reply-To: References: Message-ID: 2013/8/11 Alberto Mijares : > Hola lista: > > Estoy escribiendo un scraper en perl con WWW::Mechanize::Firefox. Todo > va bien hasta que me encuentro un formulario con AJAX. > > Los posibles valores del primer campo los puedo leer directamente > desde el HTML, pero los valores del segundo dependen de la selecci?n > del primero, y los del tercero del segundo. Entonces, logro > seleccionar un valor para el primer campo y efectivamente se activa el > segundo campo con la lista de posibles valores, lo que no he logrado > es leer esa lista de valores. > > ?Alguna idea? > Yo he encontrado algumon problemas de sync entre tu acci?n en FF y mech de lotro lado. Usa sleep(1) para estar seguro en tre cada paso. Si es un request ajax hasta sleep(3) y 5 es necesario en lagunos caso. Mira el renidmiento a mano primero varias vece s a ver que tan r?pida o lenta sea la p?gina en obtener los datos. Sobretodo en listas grandes, puede tardar varios segundos. Revisa el c?digo Js de la p?gina a ver como implementaron las listas enlazadas. Si hay datos en variables JS que no est?n a?n en el HTML y gual puedes obtener esa data con un programita JS on the fly usando eval_in_page (i.e. una funci?n an?nima que retorne los valores estructurados de tal form que sean procesables por Perl (e.g. un string JSON que luego puedas procesar con JSON.pm o un atring separado por pipes que puedas separar con split, etc.)). Web sraping es trial en error y pasito a pasito. En p?ginas con JS, DHTML y AJAX te vas a encontrar usando m?s JS con eval_in_page que Perl ! Incluso puedes ejecutar tu mismo el AJAX desde JS en la p?gina y devolver lo valores a Perl ;-) Saludos, -- Alejandro Imass > Gracias de antemano. > > Saludos > > > Alberto Mijares > _______________________________________________ > caracas-pm mailing list > caracas-pm at pm.org > http://mail.pm.org/mailman/listinfo/caracas-pm From amijaresp at gmail.com Mon Aug 12 02:54:59 2013 From: amijaresp at gmail.com (Alberto Mijares) Date: Mon, 12 Aug 2013 05:24:59 -0430 Subject: [caracas-pm] Leer resultados AJAX desde Mech In-Reply-To: References: Message-ID: 2013/8/11 Alejandro Imass : > 2013/8/11 Alberto Mijares : >> Hola lista: >> >> Estoy escribiendo un scraper en perl con WWW::Mechanize::Firefox. Todo >> va bien hasta que me encuentro un formulario con AJAX. >> >> Los posibles valores del primer campo los puedo leer directamente >> desde el HTML, pero los valores del segundo dependen de la selecci?n >> del primero, y los del tercero del segundo. Entonces, logro >> seleccionar un valor para el primer campo y efectivamente se activa el >> segundo campo con la lista de posibles valores, lo que no he logrado >> es leer esa lista de valores. >> >> ?Alguna idea? >> > > Yo he encontrado algumon problemas de sync entre tu acci?n en FF y > mech de lotro lado. Usa sleep(1) para estar seguro en tre cada paso. > Si es un request ajax hasta sleep(3) y 5 es necesario en lagunos caso. > Mira el renidmiento a mano primero varias vece s a ver que tan r?pida > o lenta sea la p?gina en obtener los datos. Sobretodo en listas > grandes, puede tardar varios segundos. > Gracias, Alejandro. Efectivamente, hay que darle unos segundos para que obtenga una respuesta; es decir, despu?s de hacer la selecci?n en el primer campo, se actualizan los posibles valores del segundo y todo se refleja en el HTML. Solo hay que darle un par de segundos para que se actualice el contenido. Saludos Alberto Mijares From ait at p2ee.org Mon Aug 12 07:07:51 2013 From: ait at p2ee.org (Alejandro Imass) Date: Mon, 12 Aug 2013 10:07:51 -0400 Subject: [caracas-pm] Leer resultados AJAX desde Mech In-Reply-To: References: Message-ID: 2013/8/12 Alberto Mijares : > 2013/8/11 Alejandro Imass : >> 2013/8/11 Alberto Mijares : >>> Hola lista: >>> >>> Estoy escribiendo un scraper en perl con WWW::Mechanize::Firefox. Todo >>> va bien hasta que me encuentro un formulario con AJAX. >>> [...] > > > Gracias, Alejandro. > > Efectivamente, hay que darle unos segundos para que obtenga una > respuesta; es decir, despu?s de hacer la selecci?n en el primer campo, > se actualizan los posibles valores del segundo y todo se refleja en el > HTML. Solo hay que darle un par de segundos para que se actualice el > contenido. > Que bueno que eso era todo. Recuerda que el rendimiento va a variar en funci?n del tr?fico. Los waits fijos son fr?giles y los mejor es lazos que esperen con un sleep(1) intercalado. Algo como: # repetir por cada AJAX for(1..5){ sleep(1); break if [cond]; } die "Timed our waiting for X" unless [cond]; [cond] puede ser cualquier de $mech->events(), $mech->on_event(), o un eval on page usando un JS que determine si el evento est? listo o no (e.g. en tu caso contar el n?mero de opciones de la segunda lista con un peque?o script on the fly). Tambi?n te puedes poner creativo pr eventos con $mech->synchronize( $event, $callback ), no obstante yo no lo he usado. Selenium tiene una serie de funciones que no he visto en Mech Firefox por ejemplo: wait.until(presenceOfElementLocated(By.id("dashboard_control")); Que es muy similar a lo que te digo arriba, pero si encuentras algo parecido arriba o alguna forma de hacerlo m?s sencillo, compartela con la lista! Saludos, -- Alejandro Imass From ait at p2ee.org Mon Aug 12 08:23:39 2013 From: ait at p2ee.org (Alejandro Imass) Date: Mon, 12 Aug 2013 11:23:39 -0400 Subject: [caracas-pm] =?iso-8859-1?q?Automatizaci=F3n_de_autenticaci=F3n?= In-Reply-To: References: Message-ID: 2013/8/11 eve tito : > Hola buenas noches, > [...] > > He visto tambi?n ?ste m?dulo: > http://search.cpan.org/dist/Win32-OLE/lib/Win32/OLE/TPJ.pod#METHOD_CALLS > > En su m?todo: my $IEWin = > Win32::OLE->GetActiveObject(" > InternetExplorer.Application"); pero veo > que me dice de objetos (aplicaciones) activas pero no s? si me da los > objetos y nombres de los diferentes elementos y de las > ventanas activas... > Hola Eva! Tenemos como 3 a?os trabajando en tecnolog?as de scraping y Web automation y no he visto el primer caso que use IE. Todos usan Firefox por alguna raz?n. Creo que Selenium IDE corre en IE y genera c?digo Perl y muchos otros lenguajes, pero realmente no estoy seguro y quiz?s no sea tan maduro como lo es con FF. Yo te recomiendo como dice Alberto que te olvides de IE para este tipo de cosas o es muy probable que exista una herramienta comercial (quiz?s de la misma gente de Selenium) que funcione bien con IE. Por la via que vas usando OLE no se si realmente sea posible hacer lo que quieres si no puedes evaluar c?digo JS en la p?gina que est? renderizada y si no tienes completo control de lo que est? pasando. No dudo que con OLE puedes manupular el IE pero de all? a evaluar c?digo JS y trasversar el HTML no se si sea tan f?cil o posible. En FF el nivel de madiuraci?n es tal que yo tengo deomonios corriendo con WWW::Mechanize::Firefox por m?s de un a?o sin parar y sin problema alguno. Mis recomendaciones a cualquiera que quiera hacer algo robusto en esta ?rea es: Perl con WWW::Mechanize:;Firefox Java con org.openqa.selenium.firefox.FirefoxDriver Ambas son excelentes pero el tiempo de desarrollo con Java es generalmente m?s largo y tedioso pero por otra parte Selenium es muy maduro a estas alturas y facilita muchas cosas. Para robots usamos Perl sin duda, y si es una app en Java usamos Selenium solo para testing del UI/UX pero no se si lo usar?a en un robot que vaya a correr por mucho tiempo. Saludos, Alejandro From amijaresp at gmail.com Thu Aug 15 11:29:06 2013 From: amijaresp at gmail.com (Alberto Mijares) Date: Thu, 15 Aug 2013 13:59:06 -0430 Subject: [caracas-pm] Leer resultados AJAX desde Mech In-Reply-To: References: Message-ID: > > Tambi?n te puedes poner creativo pr eventos con $mech->synchronize( > $event, $callback ), no obstante yo no lo he usado. > Creo que lo mejor es usar $mech->synchronize. Cuando una p?gina se ha cargado completamente en FF, se genera internamente un evento tipo DOMContentLoaded. Para probar, lo que hice fue $mech->synchronize('DOMContentLoaded', sub {print $mech->content;}); y puedo ver el HTML actualizado. Ya eso es garant?a de que puedo apoyarme en ese m?todo cuando necesite actualizar el HTML para hacer otra cosa. > Que es muy similar a lo que te digo arriba, pero si encuentras algo > parecido arriba o alguna forma de hacerlo m?s sencillo, compartela con > la lista! > > Saludos, Saludos Alberto Mijares From ait at p2ee.org Thu Aug 15 15:09:04 2013 From: ait at p2ee.org (Alejandro Imass) Date: Thu, 15 Aug 2013 18:09:04 -0400 Subject: [caracas-pm] Leer resultados AJAX desde Mech In-Reply-To: References: Message-ID: 2013/8/15 Alberto Mijares : [...] > Creo que lo mejor es usar $mech->synchronize. > > Cuando una p?gina se ha cargado completamente en FF, se genera > internamente un evento tipo DOMContentLoaded. > > Para probar, lo que hice fue > > $mech->synchronize('DOMContentLoaded', sub {print $mech->content;}); > > y puedo ver el HTML actualizado. Ya eso es garant?a de que puedo > apoyarme en ese m?todo cuando necesite actualizar el HTML para hacer > otra cosa. > Buen dato. Yo no lo he usado pero lo tomar? en cuenta para desarrollos futuros. Osea que en efecto es parecido al wait.until de Selenium Firefox Web Driver, aunque ?ste ?ltimo es bien flexible. Pero claro, Selenium es un producto comercial con buen funding y no es de extra?ar que su API sea mucho m?s rico en funcionalidad que de una forma u otra es implementable con Mech::Firefox. De todas, todas lo que le falta a Mech::Firefox (y MozRepl que est? detr?s) lo compensa con creces la productividad de Perl y por eso nosotros igual seguimos prefiriendo a Mech::Firefox/MozRepl sobre cualquier otra cosa. Ahora bien, ninguna de las dos son para nada ideales. Idealmente, Gecko o WebKit deber?an correr como librer?as que uno pudiese automatizar de una manera mucho m?s robusta que estar usando dos componentes loosley-coupled como Selenium o MozRepl. Hay algunas iniciativas en este sentido pero nada concreto, al menos no hasta donde yo pude investigar en 2012. Saludos, -- Alejandro Imass