Capturar el contenido Javascript de una página web

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Capturar el contenido Javascript de una página web

Mensaje por Chefito »

Primero un pequeño comentario:
He respondido alguna duda sobre AutoIt en algún otro foro, ya que veo que hay interes pero la gente desconoce casi por completo el lenguaje. Al responderles, les invito a venir a nuestro foro ya que encontrarán mucha más ayuda, recursos, etc al ser este foro el oficial en español y específico para el lenguaje AutoIt.
Como no quiero que estas cuestiones no aparezca donde deberían estar (aquí), las voy a postear. No voy a indicar el link original de la duda, ya que la resolución de ésta es mía :smt003 :

El código html descargado es de la página google como se puede apreciar:

Código: Seleccionar todo

#include <INet.au3>
#include <String.au3>

$codigojava=_INetGetSource('http://www.google.es') ;cojo el código html directamente de la página y lo almaceno en una variable
$array = _StringBetween($codigojava, "<script>","</script>") ;cojo los grupos de string que están entre las etiquetas <scrip>..</script> y los almaceno en un array
for $i = 0 to UBound($array) - 1 ;recorro el array con todos los grupos encontrados en la página.
msgbox(0, "Primer grupo <script>...</script> - " & $i+1, $array[$i])
Next
También me preguntó si se podía cambiar el texto del botón "Buscar en google" de la página de google por "Enviar solicitud". Esto es algo bastante facil de hacer, pero también lo incluyo aquí:

Código: Seleccionar todo

#include <INet.au3>
#include <String.au3>

$codigojava=_INetGetSource('http://www.google.es') ;cojo el código html directamente de la página y lo almaceno en una variable
$array = _StringBetween($codigojava, "<script>","</script>") ;cojo los grupos de string que están entre las etiquetas <scrip>..</script> y los almaceno en un array
for $i = 0 to UBound($array) - 1 ;recorro el array con todos los grupos encontrados en la página.
msgbox(0, "Primer grupo <script>...</script> - " & $i+1, $array[$i])
Next
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
delmarote
Aprendiz de Mago
Mensajes: 37
Registrado: 10 Mar 2010, 19:08

Re: Capturar el contenido Javascript de una página web

Mensaje por delmarote »

Esta web me esta trayendo muchos problemas porq no funciona
$codigojava=_INetGetSource("http://www.elementalwar.com")
$array = _StringBetween($codigojava,"<script>","</script>")
for $i = 0 to UBound($array) - 1
msgbox(0, "Primer grupo <script>...</script> - " & $i+1, $array[$i])
Next

Cuando miro el CodigoJava esta todo lo q me trajo pero no funciona el String Between

gracias
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Capturar el contenido Javascript de una página web

Mensaje por Chefito »

No funciona porque este caso es particular para esta web (http://www.google.es).
Simplemente no se puede copiar el código y esperar que te funcione para todo :smt018 . Tienes que estudiar tu caso particular y adaptarlo.
En este caso no funciona porque no hay cadenas "<script>". Por ejemplo, hay cadenas como "<script language="JavaScript1.2" type="text/javascript">" y otras parecidas. Para que te salga algo de código javascript de esta página...pero con algún fallo, te pongo un ejemplo:

Código: Seleccionar todo

#include <INet.au3>
#include <String.au3>
$codigojava=_INetGetSource("http://www.elementalwar.com")
$array = _StringBetween($codigojava,"<script","</script>")
for $i = 0 to UBound($array) - 1
msgbox(0, "Primer grupo <script .......>...</script> - " & $i+1, $array[$i])
Next
He puesto que busque las cadenas que empiezan por "<script". Esto tiene un pequeño error, que es que te sale lo que va a continuación de la etiqueta <script. Si quisieses quitar lo restante de esa etiqueta tendrías que hacerlo de otra manera.....con las funciones stringinstr y stringmid bastarían. Se tendría que buscar el inicio de la cadena "<script" con la función stringinstr. Sabiendo el inicio de esa cadena, tendrías que buscar el caracter ">" con la misma función. Recuerda que uno de los parámetros de la función stringinstr es que le puedes decir desde que posición del texto quieres empezar a buscar la subcadena.
Con esto ya sabemos el inicio de la cadena de código javascript que queremos conseguir. Tienes que sumarle 1 a la posición, para quitar el caracter ">".
Ahora toca saber el final. Pues sabiendo el inicio de la cadena, para saber el final toca hacerlo de nuevo con stringinstr. Hay que buscar la cadena "</script>". Y con esto ya tenemos el final de la cadena javascript.
A continuación se restan la posición inicial a la final para que te de la longitud de la cadena javascript. Una ver que tienes esto, utilizando la función stringmid, podemos sacar este trozo de cadena.
Así hasta el final del texto (que stringinstr te de 0 porque no ha encontrado más coincidencias).

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
delmarote
Aprendiz de Mago
Mensajes: 37
Registrado: 10 Mar 2010, 19:08

Re: Capturar el contenido Javascript de una página web

Mensaje por delmarote »

Muchas gracias por tu respuesta... entiendo lo q me explicaste y es exactamente lo que estaba haciendo! Al analizar un poco mas el código fuente que me traía de la web me di cuenta de lo siguiente... Yo necesito el código fuente de la web cuando estoy logueado, que es lo q hace mi programa!!!... Primero Logueo.... Segundo traigo el código fuente.
Ahora me puse a ver un poco lo q me trae de la web... y me trae el codigo fuente la web CUANDO NO ESTOY LOGUEADO... nose porq pasa esto, si en verdad estoy logueado a la web!... alguna solución? es por este motivo q no me funciona el _FFImageClick o el ffgetobj.
Aclaro por si no se entendió, el comando _INetGetSource me trae el source de la web que necesito... pero me trae el source como deslogueado.(aunque este logueado a la web me sigue trayendo el source deslogueado)

GRACIAS

PD: También probé con _FFReadHTML y me pasa lo mismo.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Capturar el contenido Javascript de una página web

Mensaje por Chefito »

Pues no se porque te pasará. Con que función envías los datos del logeo? De alguna forma en especial? Las funciones del ff.au3 para el firefox suelen tener un último parámetro para hacer esperar el script hasta que se carge la página. Este parámetro suele estar por defecto a true. Debería esperar antes de avanzar a la siguiente y luego poder hacer lo que tu quieras con la siguiente, no con la anterior :smt017 . Mira a ver si el script sigue antes de que la página esté cargada poniendo un msgbox o un consolewrite.
Si utilizas _FFFormSumit o _FFClick, estas tienen el parámetro $bLoadWait = True.
Igualmente, si ves que no te funciona por alguna casualidad, tienes otras dos funciones que esperan antes de seguir a la siguiente intrucción. Estas son _FFLoadWait y _FFLoadWaitTimeOut.
Nunca he probado ninguna función de esta librería, asi que no se si van bien o van mal :smt017 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Responder