Página 1 de 1

_IE autoit

Publicado: 20 May 2010, 00:27
por dacu
Hola buenas, vengo a preguntarles como interactuar con los diferentes objetos de una paguina web que no contienen:
name = x
id = X

Ejemplo:
<input style="border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204) rgb(153, 153, 153) rgb(153, 153, 153) rgb(204, 204, 204); font: 18px arial,sans-serif bold; height: 25px; margin: 0pt; padding: 5px 8px 0pt 6px; vertical-align: top;" size="57" value="" title="Buscar con Google" class="lst" name="q" maxlength="2048" onblur="google&&google.fade&&google.fade()" autocomplete="off">
Si queremos escribir hay simplemente con poner
#include <IE.au3>
$google = _IECreate ("www.google.es", 0,1)
$escribir = _IEGetObjByName ($google, "q")
_IEDocInsertText ($escribir, "hola que tal como estas?")
Vale ahora si queremos clicar un boton:

codigo del boton
<input type="submit" onclick="this.checked=1" class="lsb" value="Buscar con Google" name="btnG">
#include <IE.au3>
$google = _IECreate ("www.google.es", 0,1)
$boton = _IEGetObjByName ($google, "btnG")
_IEAction ($boton, "click")
Ahora es cuando os pregunto como se hace esto

Codigo del boton

Imagen

Como veis ese icono no contiene name ni ID , me gustaria saber como puedo interactuar con el
Gracias.

Todo esto tendria que ser sin dejar de poder usarse en segundo plano el programa, ya que si no, por cordenada se podria clicar facilmente.

en caso de no poder interactuar con el, dicho boton tiene una URL, pero esa URL me gustaria automatizar que la copie previamente solo i luego la lance en su devido tiempo.

bueno gracias de antemano.

Re: _IE autoit

Publicado: 27 May 2010, 15:16
por dacu
Por fabor necesito que alguien me diga como se hace, o que me oriente mas o menos..

Gracias.

Re: _IE autoit

Publicado: 27 May 2010, 18:43
por Chefito
Cliquear eso es muy facil. Piensa que ese botón en realidad es un objeto link (<A>.....</A>). Te voy a dar una pista que te lo va a dejar casi hecho :smt002 . Mira las funciones _IELinkClickByIndex, _IELinkClickByText y _IELinkGetCollection.
Con estas funciones se puede hacer lo que tú quieres de varias formas.
Miralas en la ayuda y sus ejemplos. En los ejemplos de alguna de estas hayarás distintas soluciones :smt002 .

Intenta hacer algo de código, y si tienes algún problema postealo.

Saludos.

Re: _IE autoit

Publicado: 30 May 2010, 19:52
por dacu
Chefito, gracias por contestar, estube mirando las opciones que me distes y ninguna me da el resultado, sera que no se hacerlo. pongo aqui el codigo.
#include <IE.au3>
$imperion = _IECreate ("http://xxxxxx/", 0,1)
$usuario = _IEGetObjByName ($imperion, "playerName")
$pass = _IEGetObjByName ($imperion, "playerPw")
$boton = _IEGetObjByName ($imperion, "loginSubmit")
_IEDocInsertText ($usuario, "xxxxx")
_IEDocInsertText ($pass , "xxxxxx")
_IEAction ($boton, "click")
sleep ("5000")
$imperion1 = _IECreate ("http://xxxxxx/xxxx/xxx/xxx", 0,1)
sleep ("5000")
_IELinkClickByText ($imperion1,"Mejorar edificio") ; pongo Mejorar edificio ya q asi se llama el boton, pero nada no clica.
el comando "_IELinkClickByIndex" lo e probado en google, y si segun el numero que ponga clica en un boton distinto lo que no encuentro es el por que, a ver si me explico no encuentro la referencia al "numero" y al boton que clica luego.
#include <IE.au3>
$oIE = _IECreate ("www.google.es")
_IELinkClickByIndex ($oIE, 2)
y el comando "_IELinkGetCollection" me sacas todos los ".href" "src" o cualquier cosa de esas en modo texto, aunke le cambie i las meta en una funcion tanpoco se hacer nada con este comdo..

Si me podeis seguir orientando Gracias.

Re: _IE autoit

Publicado: 31 May 2010, 11:46
por Chefito
dacu escribió:_IELinkClickByText ($imperion1,"Mejorar edificio")
Esto no creo que te funcione, ya que lo que debes poner en el segundo parámetro de la función es el texto de la etiqueta <a> (del link) y tu le pones el texto de la propiedad title de esa etiqueta.
dacu escribió:el comando "_IELinkClickByIndex" lo e probado en google, y si segun el numero que ponga clica en un boton distinto lo que no encuentro es el por que, a ver si me explico no encuentro la referencia al "numero" y al boton que clica luego.
Te voy a explicar antes un poco como va lo de la colección de objetos en una página (también es aplicable a cualquier lado....ejemplo una ventana). Los objetos tienen un orden en la página. Este número de orden es el index. La función _IELinkClickByIndex te va a cliquear el link que le indiques respecto al ese orden que tiene una página web en particular. En este caso recoge el orden de los objetos links, ignorando los demás.
Un ejemplo: Si tienes 10 links en una web, y le pones que te cliquee el 5º link (la numeración de index empieza a partir de 0. Por eso podrías referenciar desde el 0 hasta el 9....los 10 links que tiene la página) deberías de poner _IELinkClickByIndex ($oIE, 4). Debes de encontrar el index que te interesa cliquear. Como? pues podrías hacerlo por prueba y error (ir probando tú hasta que lo encuentres) o haciendo un pequeño script para indicarte. En este último caso entraría la función _IELinkGetCollection.
dacu escribió:el comando "_IELinkGetCollection" me saca todos los ".href" "src" o cualquier cosa de esas en modo texto, aunque lo cambie y las meta en una funcion tampoco se hacer nada con este modo.
La función _IELinkGetCollection te devuelve todos los objetos links en un array que contenga una página web. Después puedes hacer lo que quieras con estos objetos. En el ejemplo saca esas dos propiedades que muestras, pero se puede hacer lo que nosotros le digamos.
Puede que tu código podría ser algo así:

Código: Seleccionar todo

#include <IE.au3> 
$imperion = _IECreate ("http://xxxxxx/", 0,1) 
$usuario = _IEGetObjByName ($imperion, "playerName") 
$pass = _IEGetObjByName ($imperion, "playerPw") 
$boton = _IEGetObjByName ($imperion, "loginSubmit") 
_IEDocInsertText ($usuario, "xxxxx") 
_IEDocInsertText ($pass , "xxxxxx") 
_IEAction ($boton, "click")
_IELoadWait ($imperion)
$sMyString = "Mejorar edificio"
$oLinks = _IELinkGetCollection($imperion)
For $oLink in $oLinks
    $sLinkText = _IEPropertyGet($oLink, "title")
    If $sLinkText = $sMyString Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next
Lo que le digo aquí es que recorra todos los links de la web hasta que encuentre el que tiene la propiedad title="Mejorar edificio" y lo cliquee.
Si por alguna razón te falla con esta propiedad intentalo con otra. Ejemplo: href, class o incluso como viene en el segundo ejemplo de la ayuda de la función _IELinkClickByText (cambiando $sMyString por algo de texto de tu link), ya que esto está copiado de allí.

Saludos.