Tengo algunos sistemas "corporativos" que tengo que usar en el trabajo. Algunos de ellos son terribles, con marcos, ventanas emergentes y demás.
Estaba pensando en automatizar algunas cosas usando curl o algo así. Necesito iniciar sesión, hacer clic en hipervínculos, establecer algunos datos y hacer alguna publicación.
¿Es posible usar curl? ¿O voy a ser mejor usando algo como Selenium?
wget
ycurl
puede usar el archivo de cookies de Netscape, por lo que si su navegador también usa uno de estos, puede ser suficiente para especificarlo al descargador. Entonces, ¿qué tipo de navegador estás usando?Respuestas:
Sí, es totalmente posible con curl. Lo más importante será guardar y volver a cargar las cookies entre los usos de curl con
--cookie-jar
. También puede publicar datos de formulario según sea necesario. Normalmente uso un complemento de Firefox llamado Live HTTP Headers para capturar lo que sucede cuando navego por un sitio web. Grabará cualquier encabezado, pero también cualquier publicación en el formulario, lo cual es muy útil cuando se trata de averiguar qué hacer con curl. He escrito scripts de bash que automatizan varias invocaciones de rizo y uso tuberías y archivos temporales (cortesía demktemp
) para hacer un procesamiento limitado en la página web, pero si tengo que hacer mucho procesamiento de la página web, generalmente cambio a Perl con LibWWW.fuente
Para casos simples de descarga del contenido de una página, use curl o wget . Ambas son herramientas de línea de comandos diseñadas para descargar archivos a través de HTTP y tienen muchas opciones. En su caso, es probable que necesite hacer que estas herramientas se parezcan más a un navegador; La respuesta de lutzky y la respuesta de penguin359 mencionan algunas opciones de curl y wget que son útiles a ese respecto.
A veces, cuando necesita iniciar sesión , es mucho más fácil iniciar sesión manualmente en un navegador web, luego exportar las cookies del navegador web ( pueden ayudar extensiones como allcookies o Export Cookies for Firefox).
Si necesita analizar el contenido de algunas páginas o publicar formularios , es posible que necesite herramientas más sofisticadas que curl y wget. Algunas buenas herramientas son Perl con
LWP
(libwww) yHTML::TreeBuilder
(HTML-Tree) o Python con bibliotecas estándar (especialmentehttplib
yhtmllib
).Para interacciones más complejas con un sitio web, la referencia es Perl's WWW :: Mechanize . Esta biblioteca de Perl define funciones de alto nivel para interactuar con un sitio web como lo hace un navegador web, incluyendo POSTing, formularios, cookies, pero no Javascript. Si Perl no es su taza de té, esta biblioteca tiene imitaciones con capacidades similares en otros idiomas, como Python Mechanize y Ruby Mechanize .
Finalmente, cuando necesita Javascript , el enfoque habitual es utilizar un navegador web impulsado por un marco de automatización del navegador. Selenium y Watir son opciones populares; ver también ¿Hay alguna buena herramienta además de SeleniumRC que pueda obtener páginas web, incluido contenido post-pintado por JavaScript?
fuente
Mi favorito es
wget
, así que daré un ejemplo con eso. Lo que quiere hacer es replicar la sesión de su navegador lo más cerca posible, así que use los argumentos relevantes de la línea de comandos. Los que son necesarios dependen de cuán exhaustivamente el sitio verifique su navegador.--referer
(sic) suele ser suficiente, pero es posible que también necesite--user-agent
y--load-cookies
.Esta técnica es básicamente una suplantación de identidad del navegador: está tratando
wget
de presentarse en el sitio como el navegador. El mayor problema que enfrentará es CAPTCHA, que no está presente en el sitio de ejemplo que ha proporcionado. Además, asegúrese de cumplir con las políticas de tiempo del sitio (45 segundos en este caso), o probablemente se bloqueará.Probablemente no sea posible descargar el mismo archivo en diferentes sesiones: el sitio otorga privilegios de descarga en el archivo específico a una sesión específica.
fuente