Página 1 de 1

Enviar teclas de javascript para principiantes

Publicado: 20 Abr 2011, 16:48
por BasicOs
Este es un ejemplito de:
  • Uso de teclas rápidas en el sistema presionando (alt + l ) es igual que pulsar una linea de texto en este caso javascript:alert(document.lastModified)"&"{ENTER} y un ENTER.
  • Uso de send() para enviar teclas a programas.

Código: Seleccionar todo

; Ejemplo para ver la ficha de cuando se modificó una página web de internet via javascript y el navegador - Basicos - 
;colocarse en el navegador web en la url
www.autoit.es
HotKeySet("!l","fjavascript") ; memoriza la tecla alt  l para arrancar la función
While 1  ; está a la espera en un bucle sin fín
	sleep(1000)
WEnd
Func fjavascript() ; función de envio de teclas
Send("javascript:alert(document.lastModified)"&"{ENTER}")
EndFunc
Salu22:)

Re: Enviar teclas de javascript para principiantes

Publicado: 20 Abr 2011, 18:23
por ms999
no creo que lo aplique por ahora a nada.. pero se ve interezante....

Re: Enviar teclas de javascript para principiantes

Publicado: 21 Jun 2011, 20:13
por jamaro
Hola:

¿Es posible guardar el contenido de document.lastModified (u otro dato que obtengamos con javascript) en una variable para utilizarlo en nuestro código de Autoit?

Yo utilizo con frecuencia un código de javascript para mostrar con un prompt las coordenadas del centro de un mapa de Google Maps, y copio y pego el texto manualmente; pero me sería muy práctico que pudiera guardarlo en una variable para utilizarlo con Autoit.

; Código que muestra las coordenadas "longitud, latitud" (porque es así como lo necesito luego) en una ventana emergente del navegador
javascript:void(prompt('',gApplication.getMap().getCenter().lng()%20+%20","+%20gApplication.getMap().getCenter().lat()));


Un saludo

Re: Enviar teclas de javascript para principiantes

Publicado: 21 Jun 2011, 23:31
por Chefito
Practicamente es posible trabajar con todos los objetos y con todo el lenguaje script de una página web.

Supongo que se podrán conseguir los datos de varias maneras (como siempre). Desde intentar atacar el objeto, recogerlo de la página web, o por script.
Recuerda que en el foro de habla inglesa hay una udf para google maps. También puedes utilizar la api que te proporciona google. Hay muchas posibilidades.

Si me pones una página de ejemplo y me dices los datos que quieres recuperar te podré ayudar mejor.

Saludos.

Re: Enviar teclas de javascript para principiantes

Publicado: 22 Jun 2011, 00:22
por Chefito
Bueno, lo he mirado por encima y lo he hecho a lo facil (pero efectivo :smt003 ).
Te pongo el ejemplo:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister ()

$oIE = _IECreateEmbedded ()
GUICreate("Embedded Web control Test", 800, 500, _
        (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
        $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 780, 360)
$GUI_Button_Back = GUICtrlCreateButton("Back", 10, 420, 100, 30)
$GUI_Button_Forward = GUICtrlCreateButton("Forward", 120, 420, 100, 30)
$GUI_Button_Home = GUICtrlCreateButton("Home", 230, 420, 100, 30)
$GUI_Button_Stop = GUICtrlCreateButton("Coordenadas", 340, 420, 100, 30)

GUISetState()       ;Show GUI

_IENavigate ($oIE, "http://www.google.es/maps")

; Waiting for user to close the window
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $GUI_Button_Home
			_IENavigate ($oIE, "http://www.google.es/maps")
        Case $msg = $GUI_Button_Back
            _IEAction ($oIE, "back")
        Case $msg = $GUI_Button_Forward
            _IEAction ($oIE, "forward")
        Case $msg = $GUI_Button_Stop
            _IENavigate ($oIE, 'javascript:gApplication.getMap().getCenter().lng()%20+%20","+%20gApplication.getMap().getCenter().lat();')
			$posicion=StringSplit(_IEBodyReadText($oIE),",")
			MsgBox(0,"","Longitud: " & $posicion[1] & @CR & "Latitud: " & $posicion[2])
    EndSelect
WEnd

GUIDelete()

Exit
Puedes ejecutarlo desde un objeto IE aparte (visible u oculto), o en uno embeido como he hecho yo (visible u oculto).

Esta es una forma. Pero seguro que hay más. Solo es cuestión de probar y leer :smt024 .

Saludos.

Re: Enviar teclas de javascript para principiantes

Publicado: 22 Jun 2011, 08:43
por jamaro
Gracias Chefito:

Anoche seguí dándo vueltas por el foro inglés, y algo encontré sobre el tema de las variables (tengo que probarlo), pero no caí en la solución que has dado. No pensé en que se podría crear una página con el resultado del javascript poniéndolo de esa manera (sin prompt).

Gracias de nuevo.

Re: Enviar teclas de javascript para principiantes

Publicado: 22 Jun 2011, 09:33
por Ximorro
Como casi no programo en web (qué raro verdad), no me he metido en esa faceta de AutoIt.
Pero por si te sirve otra idea sería pasar el dato por el portapapeles, si es que javascript puede mandar algo al portapapeles, si no pues estoy diciendo tonterías...
Así no habría que crear una página nueva...

Re: Enviar teclas de javascript para principiantes

Publicado: 27 Jun 2011, 21:07
por Chefito
Perdón por haber tardado tanto en responder. He estado este puente en la playita casi sin conexión :smt003 .
Ximorro escribió:Pero por si te sirve otra idea sería pasar el dato por el portapapeles, si es que javascript puede mandar algo al portapapeles, si no pues estoy diciendo tonterías...Así no habría que crear una página nueva...
Sería una buena idea, lo malo es que el código script (javascript o vbs) devuelve en una página nueva si se ha realizado la acción bien o no (true o false). Esto ocurre si se ejecuta el código javascript desde la barra de direcciones. O sea, que tenemos el mismo problema.

Lo he hecho de una forma que ya he utilizado alguna vez. He creado dos objetos ocultos en la página web, uno que da la latitud y otro la longitud cuando los cliqueamos. Después los cliqueo a propósito cuando quiero actualizar las coordenadas. Estas coordenadas son almacenadas dentro de los objetos (propiedad value) y recupero su texto para saber las coordenadas.

Os dejo el código. El botón "coordenadas" muestra las coordenadas con el código del portapapeles, y el botón "coordenadas2" las muestra con el método de los objetos ocultos.

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister ()

$oIE = _IECreateEmbedded ()
GUICreate("Embedded Web control Test", 800, 500, _
        (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
        $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 780, 360)
$GUI_Button_Back = GUICtrlCreateButton("Back", 10, 420, 100, 30)
$GUI_Button_Forward = GUICtrlCreateButton("Coordenadas 2", 120, 420, 100, 30)
$GUI_Button_Home = GUICtrlCreateButton("Home", 230, 420, 100, 30)
$GUI_Button_Stop = GUICtrlCreateButton("Coordenadas", 340, 420, 100, 30)

GUISetState()       ;Show GUI

_IENavigate ($oIE, "http://www.google.es/maps")
;~ $codigoJava='javascript:coordenadas.value=(gApplication.getMap().getCenter().lng()%20+%20","+%20gApplication.getMap().getCenter().lat());'
$codigoJava="alert('hola');"
; Waiting for user to close the window
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $GUI_Button_Home
			_IENavigate ($oIE, "http://www.google.es/maps")
        Case $msg = $GUI_Button_Back
            _IEAction ($oIE, "back")
        Case $msg = $GUI_Button_Forward

            $oBody = _IETagNameGetCollection($oIE, "body", 0)	;obtengo el objeto body de la página
			If _IEGetObjById($oIE, "coordLng")=0 Then			;si existe el objeto creado por mí (coordLng) no lo vuelve a crear, si no existe lo crea
				;crea en la página dos objetos ocultos los cuales contendrán la latitud y longitud. Almacena las coordenadas en el objeto si ejecutamos el evento click.
				$oBody.insertAdjacentHtml("beforebegin","<input type='hidden' id='coordLng' onclick='javascript:coordLng.value=gApplication.getMap().getCenter().lng();'></input>")
				$oBody.insertAdjacentHtml("beforebegin","<input type='hidden' id='coordLat' onclick='javascript:coordLat.value=gApplication.getMap().getCenter().lat();'></input>")
				;obtenemos los dos objetos creados.
				$oCoordLng=_IEGetObjById($oIE, "coordLng")
				$oCoordLat=_IEGetObjById($oIE, "coordLat")
			EndIf
			;hacemos click en los objetos ocultos creados para que almacenen las coordenadas.
			_IEAction($oCoordLng, "click")
			_IEAction($oCoordLat, "click")
			 MsgBox(0,"","Longitud: " & $oCoordLng.value & @CR & "Latitud: " & $oCoordLat.value)	;mostramos las coordenadas recuperando el valor de los objetos creadas, o sea, sus coordenadas.

        Case $msg = $GUI_Button_Stop
            _IENavigate ($oIE, 'javascript:window.clipboardData.setData("Text",gApplication.getMap().getCenter().lng()%20+%20","+%20gApplication.getMap().getCenter().lat());',0)
;~ 			$oIE.stop
			$posicion=StringSplit(ClipGet(),",")
			MsgBox(0,"","Longitud: " & $posicion[1] & @CR & "Latitud: " & $posicion[2])
    EndSelect
WEnd

GUIDelete()

Exit
Saludos.

Re: Enviar teclas de javascript para principiantes

Publicado: 28 Jun 2011, 08:45
por jamaro
Chefito escribió: Lo he hecho de una forma que ya he utilizado alguna vez. He creado dos objetos ocultos en la página web, uno que da la latitud y otro la longitud cuando los cliqueamos. Después los cliqueo a propósito cuando quiero actualizar las coordenadas. Estas coordenadas son almacenadas dentro de los objetos (propiedad value) y recupero su texto para saber las coordenadas.
Una manera muy ingeniosa lo de los objetos ocultos, que puede dar pie a hacer muchas cosas con páginas web. ¡Muchas gracias por la idea! :smt038

Saludos