Lo primero, hay que saber que este módulo tiene muchas dependencias.
Como ya hemos dicho en el hilo que comenta la instalación de módulos, siempre es preferible la instalación de módulos que la distribución del sistema operativo nos ofrece, antes que intentar una instalación por nuestra cuenta (usando el comando cpan o cpanp).
Voy a poner como ejemplo mi propio sistema: Linux Mint (un derivado de Debian).
Lo primero, miro a ver si WWW::Mechanize::Firefox (WMF) está disponible para su instalación directa:
Using bash Syntax Highlighting
- su - # (me hago root)
- apt-cache search libwww-mechanize|fgrep firefox
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
y... no hay suerte. No está.
Bueno, pues hay que intentar la instalación con cpan o cpanp (mirar el otro hilo para ver cómo correr cpan o cpanp la primera vez).
Pero... antes, sí que puedo hacer una cosa. Lo más seguro es que WMF dependa de WWW::Mechanize, así que lo instalaré ahora mismo:
Using bash Syntax Highlighting
- apt-get install libwww-mechanize-perl
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Ahora viene la instalación de WMF.
Yo tengo configurado cpanp de tal forma que cuando un módulo no esté, me pida confirmación -manual- de si lo quiero que lo instale él, o no.
Entonces, la estrategia es: arranco la instalación de WMF y, cuando me diga que un módulo no está, lo primero que haré será ir a otra terminal e intentar instalarlo primero con apt-get install .... Si no, le respondo que lo instale él.
Arrancamos...
Using bash Syntax Highlighting
- cpanp install WWW::Mechanize:Firefox
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Siguiendo la estrategia anterior, consigo instalar los siguientes módulos mientras me va diciendo que no están instalados:
Using bash Syntax Highlighting
- apt-get install libipc-run-perl
- apt-get install libcarp-clan-perl
- apt-get install libdata-dump-perl
- apt-get install libdata-javascript-anon-perl
- apt-get install libmodule-pluggable-fast-perl
- apt-get install libnet-telnet-perl
- apt-get install libtemplate-perl
- apt-get install libtemplate-provider-fromdata-perl
- apt-get install libtext-simpletable-perl
- apt-get install libshell-command-perl
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Una vez terminada toda la instalación, cpanp entra en el modo de test.
Y aquí empiezan los problemas...
Primero: debe estar un Firefox arrancado con el complemento MozRepl instalado. Paro el cpanp con unos cuantos Control-C, para matar el proceso.
Vale... me conecto a la página de complementos de Firefox y lo instalo.
Vuelvo a arrancar el cpanp install WWW::Mechanize y... me dice que sigue sin poderse conectar. Lo paro.
Solución: hay que activar el complemento MozRepl desde el menú Herramientas del propio Firefox (Herramientas->MozRepl->Start). Vuelvo a arrancar el cpanp.
Y... ¡desastre!
No hace más que salir errores así:
MozRepl::RemoteObject: NS_ERROR_FILE_ACCESS_DENIED: Component returned failure code: 0x80520015 (NS_ERROR_FILE_ACCESS_DENIED) [nsIWebNavigation.loadURI] at t/50-click.t line 22
Lo paro.
Después de un rato de investigación, llego a la sospecha (no, no lo he encontrado en Google ) de que el problema está en que el Firefox está arrancado como usuario en el sistema, y la instalación del módulo y sus pruebas de test están corriendo como root. Entonces... lo ideal es que el Firefox también lo esté ejecutando el propio root.
Pero... la extensión MozRepl la he instalado en el Firefox de mi usuario... Si lo cierro y lo abro como root, ese otro Firefox no tendrá "la personalidad" ni los complementos de mi usuario.
Podría arrancar el Firefox como root... e instalar el MozRepl dentro de él. Total, se trata de pasar las pruebas de instalación, nada más.
Pero... se puede hacer una ñapa: dado que el usuario root no va a arrancar el Firefox nunca (o casi nunca), lo que puedo hacer es crear un enlace simbólico en /root/ que apunte a la carpeta .mozilla de mi usuario. Así, cuando arranque el Firefox como root, saldrá mi Firefox con mi personalidad (pestañas, extensiones, complementos, etc.). Vamos allá:
Using bash Syntax Highlighting
- # (ejecutado desde /root)
- ln -s /home/usuario/.mozilla .mozilla
- firefox &
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Ahora ya puedo ejecutar la instalación con cpanp, y no salen errores.
Las comprobaciones que hace son muchas, y algo lentas. Son unos cuántos minutos los que tarda en completar la tarea. Mientras tanto, vemos cómo aparecen nuevas pestañas/ventanas, con formularios de diversas clases y los programas de test interactúa con ellos. Incluso la carga de páginas externas o locales.
Al final del proceso, veo que un par de pruebas fallaron, pero todos los demás funcionaron:
Failed 2/86 test programs. 2/831 subtests failed.
y cpanp me pregunta si quiero seguir con la instalación del módulo, pese a eso. Le respondo que sí, y ya lo tengo instalado:
perl -MWWW::Mechanize::Firefox -E 1
No sale nada... así que, todo va bien ("No hay noticias, son buenas noticias").
Hacemos un experimento: entrar en la página del Granada Perl Workshop 2014, para acceder a una página privada, que solo puede ser accedida si antes nos autenticamos:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use WWW::Mechanize::Firefox;
- my $mech = WWW::Mechanize::Firefox->new(
- create => 1, # crear una nueva pestaña
- autoclose => 0, # que no queremos que se cierre
- );
- $mech->get('http://workshop.granada.pm/granada2014/login'); # ir a la web del Granada Perl Workshop 2014
- $mech->form_number(1); # seleccionar el primer formulario de la hoja
- $mech->field('credential_0','explorer'); # mis credenciales
- $mech->field('credential_1','0K%r1W-w14');
- $mech->submit(); # nos registramos
- $mech->get('http://workshop.granada.pm/granada2014/photo'); # ir a una página privada
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Naturalmente, esto no es tan sencillo: ha hecho falta hacer varias pruebas hasta dar con el nombre de la página correcta que contiene el formulario de entrada (/login).
ADVERTENCIA: el uso de este módulo provoca adicción