2009-03-04 8 views
7

En los viejos tiempos de las aplicaciones de consola interactiva, Don Libes creó una herramienta llamada Expect, que le permitía escribir scripts Tcl que interactuaban con estas aplicaciones, de forma muy parecida a como lo haría un usuario. Esperar tenido dos grandes beneficios:¿Hay un equivalente de la herramienta * expect * de Don Libes para la interacción de secuencias de comandos con páginas web?

  • Fue posible interacciones de script que de otro modo habrían tenido que ser repetido a mano, tediosamente. Un ejemplo clásico fue el infierno del acceso telefónico a Internet (desde los días previos a PPP).

  • Se pudieron escribir scripts para probar las propias aplicaciones interactivas, programáticamente, como parte de un conjunto de regresión.

Actualmente, la mayoría de las aplicaciones interactivas están en la web, no en la consola. De ahí mi pregunta: ¿existe alguna herramienta que brinde la capacidad de interactuar con páginas web y formularios web de forma programática, de forma parecida a la que ofrece la capacidad de interactuar con aplicaciones de consola mediante programación?

(Lo más parecido que conozco es Chickenfoot.)

Respuesta

5

He usado Selenium RC en conjunción con Python para impulsar las interacciones de páginas web mediante programación. Esto me ha permitido escribir pruebas de usuario bastante extensas en las que se manejan las formas y las entradas y se miden sus resultados.

Echa un vistazo al Selenium IDE en Firefox (como se mencionó anteriormente). Le permite grabar pruebas en el navegador y reproducirlas, ya sea utilizando el IDE mismo o la aplicación de control remoto.

5

Perl Mechanize funciona bastante bien para este problema exacto.

HTTPS y algunos problemas de autenticación son difíciles a veces. Publicaré un par de preguntas sobre ellos en el futuro.

+0

Miré el enlace --- ¿hay alguna, me atrevo a preguntar, documentación "fácil de usar"? –

+1

Mechanize es genial, pero debes darte cuenta de que no es tanto análogo a Expect como a la terminal. Err esa fue una analogía horrible. Probemos esto: Mechanize no automatiza un navegador, Mechanize es un navegador (programable). Si entiendes que puede ser muy poderoso, me equivoco, estoy sin espacio. –

+0

Sí, ese es un buen punto, esa es probablemente la razón por la que la página es muy compleja, ya que puede parecer de una forma en Firefox, etc., pero mechanize ve la página como "mecanizada". Pero de todos modos, a menudo es muy fácil programar también. –

1

Además de Selenium, si está haciendo lo de Ruby/Rails, está Webrat.

+0

Quiero interactuar con sitios arbitrarios. Parece que Webrat es solo para sitios implementados en Ruby donde tengo acceso al código fuente. ¿Correcto? –

5

Hice un montón de trabajo de esperar en una vida anterior y siempre pensé que el libro de espera de Don Libes era uno de los libros técnicos mejor escritos y más esclarecedores que he visto en mi vida.

Indiscutiblemente, diría que la biblioteca WWW :: Mechanize de Perl es lo que quieres. Noto anteriormente que tenía problemas para encontrar documentación. ¡Hay una buena documentación para eso! Busque la distribución del módulo en search.cpan.org y vea qué está empaquetado con él. Hay preguntas frecuentes, libros de cocina con ejemplos, etc. Además, siempre he podido obtener ayuda en la web. Si no puede obtenerlo aquí, intente en use.perl.org o perlmonks.org. El autor de WWW :: Mechanize, Andy Lester, es present on Stack Overflow. (También es un tipo amigable y servicial.)

Creo que WWW :: Mechanize también tiene un programa que es análogo al programa de espera de Expect: configura un proceso de proxy ejecutando este programa como servidor, apunte a su navegador como un proxy, realice las acciones que desea automatizar, y luego el programa proxy le brinda un programa WWW :: Mechanize para que lo utilice como base para su proyecto. (Si funciona como autoexpect, seguramente querrás hacer modificaciones desde allí).)

Como se mencionó anteriormente, WWW :: Mechanize es un navegador (para ser más exactos, es un cliente web o cliente http) que resulta ser programable. La última vez que miré, incluso había trabajo en progreso para que sea compatible con JavaScript.

Cuestiones relacionadas