Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/09/2015, 12:35
Avatar de mrocf
mrocf
 
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 9 meses
Puntos: 88
De acuerdo Respuesta: rellenar formulario WEB con excel

Hola! a todos
No pretendo, AGmzT, enseñarte -en una respuesta- el lenguaje HTML. Pero si te puedo dar una idea de lo que está pasando. Veamos:

- Abre el Notepad tras lo cual copia y pega lo siguiente:
Código HTML:
Ver original
  1.   <head>
  2.     <title>Este es el 'head' de la página</title>
  3.   </head>
  4.  
  5.   <body>
  6.     <input type="text" name="txtInput_1" value="Primera caja de texto">
  7.     <br><br>
  8.     <input type="text" name="txtInput_2" value="Segunda caja de texto">  
  9.     <br><br>
  10.     <input type="text" name="txtInput_3" value="Tercera caja de texto" id="ct01">  
  11.   </body>
  12.  
  13. </html>
- Guarda este archivo de texto con el siguiente nombre: Htm de prueba.htm

- Vamos al Excel... Crea un nuevo libro e incorpórale a un módulo común la siguiente macro:

Código vb:
Ver original
  1. Sub Macro1()
  2. Dim ie, mObj, iElem
  3. Cells.Clear: Range("a1:c1") = Array("Por Id:", , "Por Name:")
  4.  
  5. Set ie = CreateObject("InternetExplorer.Application")
  6. ie.Visible = True
  7. ie.Navigate ThisWorkbook.Path & "\Htm de prueba.htm"
  8.  
  9. 'Búsqueda por Id:
  10. Set mObj = ie.Document.getelementbyid("ct01")
  11. Range("a2") = mObj.Value
  12.  
  13. 'Búsqueda por Tag:
  14. Set mObj = ie.Document.getElementsByTagName("input")
  15.  
  16. For Each iElem In mObj
  17.   Cells(Rows.Count, "c").End(xlUp).Offset(1) = iElem.Value
  18. Next
  19. End Sub
- Guarda este libro Excel EN LA MISMA CARPETA donde guardaste el archivo de texto anterior con cualquier nombre.

- ¿Qué hace esta macro?...

a) Crea una instancia de IE
b) Navega hacia la página representada por el archivo Htm de prueba.htm.
c) Y utiliza las dos variantes sobre las que quiero hacerte notar la diferencia.
___________________________

- Cuando la macro hace:
Set mObj = ie.Document.getelementbyid("ct01")

es porque EN TODA LA PÁGINA Web existe un ÚNICO elemento identificado por el nombre "ct01".

Este hecho -en la página- lo ves aquí:
<input type="text" name="txtInput" value="Tercera caja de texto" id="ct01">
(¿ves que al final dice: id="ct01"?)

¿Nos vamos entendiendo?...
___________________________

- Ahora bien: las otras dos cajas de texto no están identificadas. Nos preguntamos: ¿Cómo acceder a ellas?...

- Lo hacemos utilizando una variante del "get" anterior que es:
Set mObj = ie.Document.getElementsByTagName("input")

Los detalles a tener en cuenta son:

- La "s" en getElementsByTagName te indica que no obtendremos "un único elemento" sino TODOS los elementos identificados por el tag "input" (para el ejemplo).

- Así el objeto "mObj" de la macro se transforma en una colección de "input" a la que accedemos -una a una- mediante: For Each - Next.

- Entonces: ¿Cómo identificas de entre todos los elementos "input" el que estás intentando localizar?...
. A veces por el "className": iElem.className
. Otras veces por el "Name": iElem.Name (aparentemente éste sería tu caso).
___________________________

- Para terminar, entonces: tu macro debe recorrer -en estos casos- TODO el conjunto de "input" hasta hallar aquél cuyo "Name" estás tratando de localizar.

- Y una vez localizado: ¿Qué haces?... Bueno:

En lugar del "tranquilo y cómodo":
IE.Document.getelementbyid("gbqfq").Value = "1234"

harás:
iElem.Value = "1234"
___________________________

¿Entendido?...
Saludos, Cacho R.