Capturar las urls de las páginas abiertas del IE

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 las urls de las páginas abiertas del IE

Mensaje por Chefito »

Primero un pequeño comentario:
He respondio 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 la duda es mía :smt003 :

Código: Seleccionar todo

#include <IE.au3>

Opt("WinTitleMatchMode", 2)
$instancia=0
While 1
$instancia+=1
$oIE = _IEAttach ("Windows Internet Explorer","WindowTitle",$instancia) ;miro las ventanas de IE por el título de ventana
If @error Then ExitLoop ;si hay un error en el ataque a las ventanas IE salgo del bucle.
$direccion=_IEPropertyGet ($oIE, "locationurl") ;almaceno en la variable la dirección url.
If @error=0 Then MsgBox(0,"",$direccion) ;si no hay url (por casualidad la ventana no es de IE) no muestra la caja de texto con la url.
WEnd
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 ;).
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Entendiendo la funcion Opt("option", Param)

Mensaje por markus »

Hola un saludo a todos los foristas..
en esta oportunidad quisiera pedir una ayuda para entender mejor la funcion Opt("option", Param).

Segun la ayuda de Autoit esta funcion es utilizada para setear ciertas opciones en un script pero tengo mis dudas al respecto.
El compañero Chefito me respondió a una pregunta que realice en otra web sobre la manera de buscar u obtener la url de una pagina web que estuviese abierta o cargada en el navegador. El me respondio con el siguiente script:

Código: Seleccionar todo

#include <IE.au3>
Opt("WinTitleMatchMode", 2)
$instancia=0
While 1
	$instancia+=1
	$oIE = _IEAttach ("Windows Internet Explorer","WindowTitle",$instancia)	;miro las ventanas de IE por el título de ventana
	If @error Then ExitLoop	;si hay un error en el ataque a las ventanas IE salgo del bucle.
	$direccion=_IEPropertyGet ($oIE, "locationurl")	;almaceno en la variable la dirección url.
	If @error=0 Then MsgBox(0,"",$direccion)	;si no hay url (por casualidad la ventana no es de IE) no muestra la caja de texto con la url.
WEnd
Este script se entiende perfectamente y te doy las gracias chefito pero no tengo muy claro esta parte:

Código: Seleccionar todo

Opt("WinTitleMatchMode", 2)
Segun la ayuda de Autoit, "WinTitleMatchMode" se utiliza para decirle al script que busque por titulo y el 2 quiere decir (Match any substring in the title) busca cualquier sub-string en el titulo. Ahora bien esto se entiende pero no tengo muy claro cual es la finalidad de esto. Se utiliza Opt () para? Es decir, el script se setea con Opt() y si no cmple ese criterio no hace nada? es como si se quedara en un bucle dormido o que? Es decir, si estoy utilizando esta funcion $oIE = _IEAttach ("Windows Internet Explorer","WindowTitle",$instancia) para que utilizo Opt()? Me podrian aclarar la duda por favor?
Un saludo...
Avatar de Usuario
Fredinchy
Aprendiz de Mago
Mensajes: 32
Registrado: 30 Mar 2010, 01:27
Ubicación: Unknown

Re: Entendiendo la funcion Opt("option", Param)

Mensaje por Fredinchy »

La función Opt sirve para configurar ciertos parámetros en funciones para lograr un resultado específico.

Por ejemplo en Opt("WinTitleMatchMode", ) tiene los parámetros 1,2,3 y 4.. Cuando se coloca el 1 es para que cuando se busque el título de la ventana sean los primeros caracteres. Ejm: si yo voy a trabajar con la ventana "Windows Internet Explorer" y si hago un WinExists("Windows","") la función va a regresar el valor 1, porque coinciden los primeros caracteres; si colocas WinExists("Internet","") va a regresar 0 porque no coinciden los primeros caracteres. OJO puedes colocar WinExists("Win","") y va a regresar 1. :smt004

Ahora vamos con el Opt("WinTitleMatchMode", 2) :smt005 .. El parámetro 2 busca si en el título de la ventana coincide cualquier cadena de texto. Ejm: WinExists("Internet") regresa 1 porque busca cualquier cadena de texto.. Ahora con este modo así coloques una letra de la ventana ya te dirá que existe.. así que hay que tener cuidado.. WinExists("s") regresa el valor 1 por: WindowS Internet Explorer. Ok creo que esto ya quedó claro.. siguiente xD

Opt("WinTitleMatchMode", 3) :smt004 .. El 3 dice que coincida exactamente el título de la ventana.. Ejm: WinExist("Windows") regresa 0 porque no es igual al título, pero si colocas WinExists("Windows Internet Explorer") regresa 1 porque coincide perfectamente. Toma en cuenta entre mayúsculas y minúsculas también!

Opt("WinTitleMatchMode", 4) :smt026 .. Con el parámetro 4 te permite utilizar los modos avanzados, que puede ser por ejemplo la clase de la ventana.. Ejemplo con la ventana del Scite.. WinExists("[CLASS:SciTEWindow]") regresa 1 si esta abierta la ventana del scite claro, pero el punto es que te permite utilizar los modos avanzados. :smt015

Bueno espero que ya no tengas dudas.. Aunque el parámetro puede ser del -1 al -4 también pero son iguales a sus contrapartes por así decirlo (1 y -1, 2 y -2, etc.) solo que fuerza las minúsculas. Así que si tienes una ventana Windows Internet Explorer y haces un WinExists("wInDOws") con el Opt("WinTitleMatchMode", -1) va a regresar 1. Si no me explique bien esto es algo así como que no le presta atención a mayúsculas y minúsculas.

Saludos espero que quede claro! :smt020
Cause no one here can ever stop us! They can try but we won't let them! No way.. :smt020
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Entendiendo la funcion Opt("option", Param)

Mensaje por Chefito »

Buena la explicación Fredinchy :smt023 .

En el caso particular de este código, utilizé la opción 2 de esta función porque si os dais cuenta, las ventanas de IE siempre tienen al final la subcadena "Windows Internet Explorer". Con esta opción le digo que en todos los títulos de todas las ventanas, busque esta subcadena, y si encuentra alguna la reconozca como un IE.
Pero en ese momento me equivoqué al explicar lo anterior, ya que todas las ventanas que encuentre la función _IEAttach van a ser de IE!!!!. Por eso, con la condición anterior (la de que encuentre la subcadena "Windows Internet Explorer" en las ventanas de IE) le estamos indicando que ataque a todas las ventanas IE que hayan.

Por cierto, también me equivoqué en otra parte del código :smt005 :smt005 :smt005 .
Puse esta línea de código para tratar un posible error:

Código: Seleccionar todo

If @error=0 Then MsgBox(0,"",$direccion)   ;si no hay url (por casualidad la ventana no es de IE) no muestra la caja de texto con la url.
Pero no hace falta :smt003 , ya que al utilizar la función _IEAttach para capturar las ventanas IE, solo me va a capturar las IE y ninguna más!!!! :smt002 . Esto quiere decir que la función _IEPropertyGet ($oIE, "locationurl") nunca me va a generar un error ya que siempre va a ver un url, con lo cual siempre va a entrar en esta condición :smt002 .
Lo que no he probado es lo de conseguir la url de una ventana al estilo popup. Puede que en esta situación si falle :smt017 . No se no se. Si fallase en esta situación, entonces si tendríamos que tratar el error y decir que es una ventana IE la cual no devuelve url o algo así. Muy facil :smt002 .

Creo que me equivoqué en todo esto porque empecé a hacerlo con la función WingetHandle. Al hacerlo con esta función si que había que reconocer si eran de IE o ventanas normales.

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 ;).
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Re: Entendiendo la funcion Opt("option", Param)

Mensaje por markus »

OK amigos, les entendi perfectamente pero hay algo que todavia no me cuadra.
El Opt("WinTitleMatchMode", 2) y el $oIE = _IEAttach ("Windows Internet Explorer","WindowTitle",$instancia)
¿Por que digo que no me cuadra? Bien, es que con el _IEAttach yo puedo elegir buscar una cadena en el titulo de una ventana, en el texto de una ventana, en el HTML de una ventana, etc. Para que necesito yo incluir en el script a Opt("WinTitleMatchMode", 2) si ya con el _IEAttach me parece que es suficiente.... No se :smt017 esa es la confusion que tengo porque con el _IEAttach se puede hacer todo eso..... para que necesito entonces el opt(). Saludos...
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Entendiendo la funcion Opt("option", Param)

Mensaje por Chefito »

:smt005 :smt005 :smt005 . Sí, tienes razón. Eso es otra cosa que sobra en el código :smt003 . No hace falta.
El código final podría quedar simplemente así:

Código: Seleccionar todo

#include <IE.au3>
$instancia=0
While 1
   $instancia+=1
   $oIE = _IEAttach ("Windows Internet Explorer","WindowTitle",$instancia)   ;miro las ventanas de IE por el título de ventana
   If @error Then ExitLoop   ;si hay un error en el ataque a las ventanas IE salgo del bucle. Lo utilizo para finalizar el bucle cuando acaban las ventanas IE.
   $direccion=_IEPropertyGet ($oIE, "locationurl")   ;almaceno en la variable la dirección url.
   MsgBox(0,"",$direccion)   ;muestra la caja de texto con la url.
WEnd
Ya he dicho que no se como se comportaría _IEPropertyGet ($oIE, "locationurl") con ventanas IE sin título y/o sin url. Puede que diese fallo y habría que tratarlo. Pero tratar eso sería muy muy facil.

He tenido esos errores poniendo código de más, ya que al principio lo estaba haciendo de otra forma, averiguando el handle de todas las ventana IE con wingethandle ("Windows Internet Explorer") y luego atacarlas con _IEAttach con el parámetro handle. Por eso necesitaba ese opc(). Pero luego me acordé que _IEAttach también aceptaba subcadenas para atacar la ventana IE por el título y lo cambié. Así me ahorra algunos pasos y algo de código. Y como pasa muchas veces, no me di cuenta de quitar algunas cosas que ya no hacían falta :smt002 .

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