excel - refrescar - rellenar formulario web desde vba
Automatice IE con VBA-Haga clic en el botón de anclaje con span (2)
El método getElementsByClassName
devuelve una colección de elementos con este nombre de clase. Esto se debe a que un DOM
HTML
puede contener múltiples elementos con el mismo nombre de clase. Es por eso que la forma plural getElement s
. Por lo tanto, debe saber qué elemento de la colección de elementos necesita. Si es el primero, entonces:
...
Set oElementCollection = mydoc.getElementsByClassName("cxcontentcommentaction")
oElementCollection(0).Click
...
Si el primero no es el correcto, intente
For i = 0 To oElementCollection.Length - 1
MsgBox oElementCollection(i).innerHTML
Next
para encontrar el correcto.
Editar:
Después de sus adiciones en la pregunta:
con
Set oElementCollection = mydoc.getElementsByClassName("cxcontentcommentactiontext")
probablemente consigas una colección de objetos span
, no enlaces. Pero esos elementos de span
deben estar dentro de los enlaces. Entonces los enlaces son sus padres.
Asi que
Set oElementCollection = mydoc.getElementsByClassName("cxcontentcommentactiontext")
For Each span In oElementCollection
If span.innerHTML = "Attach File" Then
span.parentNode.Click
Exit For
End If
Next span
Actualmente realizo la automatización para cargar archivos en saleforce.
El texto HTML es:
<div>
<a href="javascript:void(0);" onblur="chatter.getFeed().contentCommentActionBlur(this);" onfocus="chatter.getFeed().contentCommentActionFocus(this);" onclick="chatter.getFeed().createContentComment(this,''0D52700002cc67d'', false, true);" onmousedown="chatter.getFeed().contentCommentActionMouseDown(this);" class="cxcontentcommentaction">
<img class="cxcontentcommentactionimg" src="/s.gif">
<span class="cxcontentcommentactiontext">Attach File</span>
</a>
</div>
Para hacer clic, el usuario del ancla debe bajar y presionar el botón "Adjuntar archivo".
Lo he intentado con dos diferentes haciendo
1.Coding get element por la clase de ancla = "cxcontentcommentaction":
Set htmldoc = mydoc.getElementsByClassName("cxcontentcommentaction")
htmldoc.Click
2.Coding get element por span class = "cxcontentcommentactiontext":
Set htmldoc = mydoc.getElementsByClassName("cxcontentcommentactiontext")
htmldoc.Click
Para ambos, recibo el error "El objeto no admite esta propiedad
Después de tu comentario, lo intenté así,
Set oElementCollection = mydoc.getElementsByClassName("cxcontentcommentactiontext")
For Each link In oElementCollection
If link.innerHTML = "Attach File" Then
link.Click
Exit For
End If
Next link
Lo he intentado por debajo de HTML
<a href="javascript:window.invokeOnClickJS_00bG0000000ikPK%28this%29" class="menuButtonMenuLink">
Send an Email</a>
El código siguiente funciona correctamente para html anterior
Set oElementCollection = mydoc.getElementsByClassName("menuButtonMenuLink")
For Each link In oElementCollection
If link.innerHTML = "Send an Email" Then
link.Click
Exit For
End If
Next link
Pero con el botón "Adjuntar archivo" que se menciona en esta pregunta, solo se presenta un problema.
La respuesta de Alex Richter parece ser correcta, también tuve un problema similar. Por lo tanto, si no resolvió su problema, avísenos y también verificaré mi solución.
Aunque recomendaría poner el punto de quiebre directo después de esa línea y observar el resultado ya sea que haya elegido el correcto.
Además, también está permitido editar el código mientras está parado, por lo que puede agregar otra línea para probar. O también puede configurar la siguiente instrucción donde continuar.
Dichos trucos pueden ahorrarle mucho tiempo para solucionar la implementación correcta.
Otra forma de experimentar con esto es utilizar los navegadores integrados en la consola: solo presiona F12 y selecciona la pestaña de la consola.
=> documento
<= HTMLDocument => https://.com/ ......
=> document.getElementsByClassName (''actual-sitio'')
<= HTMLCollection []