[caracas-pm] Leer resultados AJAX desde Mech
Alejandro Imass
ait at p2ee.org
Mon Aug 12 07:07:51 PDT 2013
2013/8/12 Alberto Mijares <amijaresp at gmail.com>:
> 2013/8/11 Alejandro Imass <ait at p2ee.org>:
>> 2013/8/11 Alberto Mijares <amijaresp at gmail.com>:
>>> 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
More information about the caracas-pm
mailing list