Curso AppleScript: Rellenar un formulario web, con AppleScript, por supuesto, por Julifos

Vamos a investigar tres maneras: a través de Internet Explorer, de “AppleScript para URL” y de “curl” (de la command-line de UNIX), de manera sencilla.

Vamos a investigar tres maneras: a través de Internet Explorer, de “AppleScript para URL” y de “curl” (de la command-line de UNIX), de manera sencilla.

AppleScript para URL

O “URL Access Scripting”, en inglés. Es una aplicación controlable sólo a través de AppleScript y sólo posee dos comandos: “download” y “upload”; que tienen una utilidad evidente. A nosotros nos interesa sólo “download”, que posee el parámetro “form data” (o “datos de formulario”).

Como breve introducción, comentaremos que la mayoría de formulario que andan por ahí van dirigidos a una aplicación que corre en el servidor en cuestión, y puede ser de diversos tipos: un CGI, una página PHP o ASP, etc.

Supongamos que en “www.kapullo.com” tenemos un formulario de búsqueda, que se ejecuta en la aplicación “kapullo.cgi” y que, una vez procesado, devuelve los resultados de la búsqueda. Supongamos que no nos apetece tener que abrir un navegador web, ir a la página en cuestión, rellenar el formulario y enviarlo; queremos hacerlo todo desde un simple script. Pues bien, justamente eso es lo que todos queremos.

Cuando un formulario se envía a una aplicación, a ésta le llegan los datos en forma de texto. Supongamos que en el buscador que hemos dicho sólo hay un campo de texto donde se introduce la palabreja a buscar, y que ese campo se llama “buscar”. Y queremos buscar la palabra “garbanzo”.

Una vez rellenado este campo (haciéndolo manualmente) y clickeado el botón “Enviar”, el .cgi recibirá estos datos: “buscar=garbanzo”.

Los elementos del formulario se concatenan con el símbolo “&”, y a cada elemento acompaña su valor. Por ejemplo, el valor del campo “buscar” es “garbanzo” (separado por el símbolo “=”). Si hubiese varios parámetros de búsqueda, quedaría algo así como “buscar=garbanzo&categoria=comida&urgencia=total”.

Así es como funciona un formulario normal con método GET.

Pues esta es la pequeña cadenita de texto que tendríamos que hacerle llegar a la aplicación que (por qué no) es accesible directamente desde el navegador o desde nuestro script (a través de “download”). Por supuesto, antes tenemos que saber qué elementos espera recibir la aplicación.

tell application “AppleScript para URL”

 download “http://www.kapullo.com/kapullo.cgi” to x form data “buscar=garbanzo”

end tell

La “x” es un alias ficticio donde se almacenará la respuesta de la aplicación, habitualmente una página HTML, como aquéllos devueltos por el comando de las Adiciones Estándar (“new file” o “choose file name”).

Con este comando “download” estamos intentando simplemente “descargar” una cosa, una aplicación, que no es descargable en este caso; y que, al adjuntar los parámetros que espera recibir, nos devolverá una respuesta (el resultado de la búsqueda).

En muchos casos, también podremos añadir el “form data” al mismo URL de la página/aplicación, y obtendremos el mismo resultado:

tell application “AppleScript para URL”

 download “http://www.kapullo.com/kapullo.cgi?buscar=garbanzo” to x

end tell

Si la aplicación remota lo admite, el resultado será el mismo.

Sin habernos dado ni cuenta, hemos rellenado el formulario. Si, por ejemplo, hubiésemos metido nuestra dirección de correo electrónico y nuestro teléfono a un sitio de compras, entonces habríamos hecho un pedido y nuestros datos estarían en su base de datos. Así de sencillo.

Internet Explorer

En principio, Internet Explorer admite un comando exactamente igual que “AppleScript para URL”, pero parece que no funciona muy bien. Se trata de OpenURL. Pero no nos importa.

Supongamos que queremos rellenar un formulario y que se vea. O supongamos que “AppleScript para URL” no nos funciona porque la aplicación que recibe los datos no admite este método o que es demasiado complicado.

Pues nada. A trabajar.

Primero abrimos la página del formulario en Internet Explorer (se puede hacer de muchas maneras, pero veremos una muy sencilla con su comando GetURL). Y luego accederemos a los objetos del formulario gracias al comando do script, que nos permite ejecutar código JavaScript a través de AppleScript y, por tanto, manipular los objetos de la página.

El JavaScript sencillo define que un “formulario” es un objeto del “documento” (que, a su vez, es parte de la “ventana”). Esto es la sencilla jerarquía que viene existiendo desde que el hombre es hombre, y que permite que el Rey escupa al General, el General al Soldado, el Soldado al Civil, el Civil a su Perro y el Perro al Gato (y así sucesivamente). Por tanto:

ventana > documento > formulario > objetos del formulario > propiedad del objeto

Podemos dar por supuesto que el documento pertenece a la ventana y dejarlo en:

documento > formulario…

Además, podemos acceder a los objetos por su posición (primero, segundo…) o directamente por su nombre, si es que el nombre está definido, y vamos ya al ejemplo real:

document.berganza

o

document.forms[0]

Aquí hemos supuesto que hay un formulario (el primero de los que existen, que es el número 0; el segundo sería 1, el tercero 2 y así sucesivamente). También hemos supuesto que se llama “berganza” y podemos acceder a él por su nombre directamente. Os presento a “berganza”:

<form name=”berganza”></form>

Y ahora os presento a “lola”, que por ser nombre de mujer, es más complicado:

<form name=”lola” action=”procesar.cgi” method=”get”>

<input type=”text” name=”buscar”>

<input type=”submit” name=”formulario” value=”Enviar ya”>

</form>

Tampoco era para tanto. Un simple formulario de búsqueda, con un campo de texto y un botón para enviarlo (al programilla de búsqueda “procesar.cgi”).

Veamos cómo se rellena el campo de texto:

document.lola.buscar.value = “garbanzo”

o

document.forms[0].elements[0].value = “garbanzo”

La primera manera es más personal, una forma más personal de tratar al formulario. La segunda manera es más fría, pero puede servir si no sabemos o no nos importa el nombre de los elementos. Con “value” estamos accediendo a una de las propiedades de un campo de texto: su valor.

También podríamos haber hecho esto (aunque sea complicar las cosas):

document.forms[“lola”].elements[“buscar”].value = “garbanzo”

¿Y ahora qué hacemos para enviarlo?

document.lola.submit()

Así de simple. Llamamos al formulario y utilizamos el comando (en JavaScript se le dice “método”) “submit()”, que sirve para enviar formularios.

Aquí va el ejemplo completo:

tell application “Internet Explorer”

 GetURL “http://www.google.com/”

 delay 2 — esperamos que se abra la página, por ejemplo 5 segundos

 set el_javascript to “document.forms[0].elements[0].value = ‘garbanzos’

document.forms[0].submit()”

 do script el_javascript

end tell

Y habríamos realizado una búsqueda en Google.

Hemos utilizado los apóstrofos (‘) porque a JavaScript le da igual una cosa que otra y “escapar” las comillas en AppleScript es un rollo; sería “… value= \”garbanzos\””.

Ya que estamos metidos en harina, dejaré caer que se podría haber hecho de otra manera: invocando al objeto “enviador” del formulario y “clickeándolo”. Es un método válido únicamente en JScript, que es una variante de JavaScript introducida por MicroSoft, y entendida sólo por su navegador “Internet Explorer” (supongo que poco a poco se irá implementando en otros), y que en su versión Macintosh no funciona al 100%.

Como esto es una cosa que evoluciona muy rápidamente, no daré muchas explicaciones al respecto. El que quiera saber, que acuda a las fuentes del JScript, en la página de MicroSoft.

En cualquier caso, no es mal sitio para investigar un poco sobre elementos de formularios. Aquí hemos visto que podemos establecer el value de un campo de texto. También podríamos establecer el value de un menú pop-up en 2 (el segundo valor de la lista) o el valor checked de un “checkbox” o un “radio button”: true (sí) o false (no).

Y, en fin, hacer muchas otras cosas.

curl

“curl” es una herramienta de la línea de comandos de UNIX, y sirve para hacer conexiones al interné. Permite, por ejemplo, subir documentos a un servidor FTP, ver los contenidos de una página HTTP, o enviar un formulario (que viene a ser lo mismo que ver una página web, como sabemos).

Su uso es muy similar al que hemos dado a “URL Access Scripting”, como veremos, utilizando el método GET de la manera más sencilla posible. También podríamos pasar datos con POST, cookies, y hacer millones de cosas. Pero esta sencillísima manera nos servirá para rellenar la mayoría de formularios que hay en el internés.

Primer paso: buscar el URL de la aplicación que procesará el formulario.

Por ejemplo, vamos a hacer una búsqueda en http://www.macslash.org/. Si le echamos un vistazo a la página, veremos el formulario de búsqueda. Mirando el código fuente, vemos que la “action” del dichoso formulario es “/search.pl”: utilizan perl (search.pl), localizado en la raíz del dominio. Así pues, el URL es:

http://www.macslash.org/search.pl

Segundo paso: buscar el nombre de los elementos del formulario que queremos rellenar.

El campo de texto (dentro del mismo “form”) que hay que rellenar se llama (oh, sorpresa!) “query”. Y si le asignamos un valor (por ejemplo “imac”, que me interesa una barbaridad), podemos construir nuestra búsqueda:

query=imac

Tercer paso: escribir y ejecutar el código.

Podemos hacer dos cosas: concatenar los datos de la búsqueda al URL o enviarlos como parámetro. Veámoslo, o no lo hagamos:

set app_url to “http://www.macslash.org/search.pl”

set query_data to “query=imac”

–> método 1: concatenar la búsqueda al url

do shell script “curl ‘” & app_url & “?” & query_data & “‘”

–> nótese la interrogación “?”, que marca dónde acaba uno y empieza otro

–> método 2: enviar la búsqueda como parámetro

do shell script “curl ‘” & app_url & “‘ -d ‘” & query_data & “‘”

–> nótese el añadido de “-d”, que es el parámetro “data” de “curl”

Ambos resultados deberían devolver el mismo resultado.

Lo mejor de este método es que nos devolverá a nosotros la página, sin tener que leer los resultados desde un archivo de texto o desde una página del Explorer… Muy útil, sí señor.

Saludos.

Los restantes artículos sobe AppleScript se pueden encontrar en la categoría de Tutorial

0 0 votos
Article Rating
Subscribe
Notify of
6 Comments
Oldest
Newest Most Voted
Opiniones Inline
Ver todos los comentarios
Anónimo
Anónimo
19 years ago

haber

Anónimo
Anónimo
18 years ago

ddwdedwedeee

Anónimo
Anónimo
18 years ago

gracias muy util la informacion…pero ppodrian ayudarme: necesito poner un formulario en una pagina para que este sea enviado al correo de la misma pagina…pero con accion mailto se abre el outloco o el entorage …pero necesito que se valla directo al correo de la pagina….como lo puedo hacer…

gracias

Miguel

Anónimo
Anónimo
17 years ago

Hola a todos Necesito un favor

Necesito hacer que varios usuarios puedan subir y bajar archivos por ejemplo de imagenes desde una web, es decir que un usuario “x” suba un archivo 1.jpg y que otro usuario “Z” le guste ese archivo y lo baje, es decir una carpeta en donde se puedan alojar archivos de imagenes, que esten al acceso de los usuarios, que puedan subir y bajarlos cuando quieran, buscarlos, etc…

Por favor si alguien me puede dar una mano en esto…. si me pueden pasar los script, un ejemplo, se los agradecería mucho…

saludos Karina

Anónimo
Anónimo
17 years ago

Muchas gracias por la información me ha sido de suma utilidad para la realización de mi proyecto.

Anónimo
Anónimo
17 years ago

Esto es una prueba de procesamiento, distribución y almacenamiento de información.

6
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x