Enviar teclas de javascript para principiantes

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Enviar teclas de javascript para principiantes

Mensaje 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:)
Avatar de Usuario
ms999
Hacker del Foro
Mensajes: 116
Registrado: 26 Ene 2011, 06:13

Re: Enviar teclas de javascript para principiantes

Mensaje por ms999 »

no creo que lo aplique por ahora a nada.. pero se ve interezante....
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Enviar teclas de javascript para principiantes

Mensaje 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
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Enviar teclas de javascript para principiantes

Mensaje 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.
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 ;).
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Enviar teclas de javascript para principiantes

Mensaje 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.
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 ;).
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Enviar teclas de javascript para principiantes

Mensaje 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.
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Enviar teclas de javascript para principiantes

Mensaje 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...
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Enviar teclas de javascript para principiantes

Mensaje 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.
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 ;).
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Enviar teclas de javascript para principiantes

Mensaje 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
Responder