VBA - Webbrowser - como clicar no botão HTML sem um nome?
VBA - Webbrowser - como clicar no botão HTML sem um nome?
Inserir o post:
Às vezes, você se vê na situação de precisar acionar um botão em uma página da internet, e o VBA ou VB simplesmente não possui uma referência de nome para executar o clique, como por exemplo:
HTML:
<input type="submit" value="Login" onclick="submitForm();">
VB:
objIE.document.getElementsByName("Login")(0).Click
Quando você declara, não há um atributo "name" no HTML para o elemento que você está tentando acessar. No entanto, você pode usar um seletor de CSS com o atributo = valor para direcionar os atributos presentes:
objIE.document.querySelector("[onclick='submitForm();']").click
A mesma ideia se aplica a:
objIE.document.querySelector("[value=Login]").click
Ou até mesmo:
objIE.document.querySelector("[type=submit]").click
Além disso, você pode enviar o formulário diretamente usando:
objIE.document.getElementsByTagName("form")(0).submit
Se houver mais de um elemento correspondente ao seletor de atributos, você pode usar o .querySelectorAll para recuperá-los e indexá-los no nodeList retornado, por exemplo:
objIE.document.querySelectorAll("[type=submit]").item(1).click
Onde "1" no exemplo acima seria o segundo botão correspondente. "2" seria o terceiro, e assim por diante.
Você também pode estar procurando por estas referências abaixo:
A parte do HTML onde está seu botão é a seguinte:
<td id="td">
<button type="button" id="botaoFlatConfirmar" onclick="if (critica('frmtela', 'True','', false,false, 'divparametro', this)) { consultar();; }" barraBotao="true" style="white-space: nowrap;background: buttonface url(/Apoio_SitarWeb/Includes/Interface/CoolBar/images/Confirmar.gif) 0px center no-repeat; HEIGHT: 22px; FONT-FAMILY: Tahoma, Arial, Helvetica; FONT-SIZE: 8pt; FONT-COLOR: menutext; PADDING-LEFT: 12; MARGIN-LEFT: 0; " title="Confirmar"> Confirmar </button>
</td>
Para efetuar o clique, você pode utilizar a propriedade ID (id="botaoFlatConfirmar") e, utilizando o xpath, fazer o clique.
Aqui está uma função que você pode colocar em um módulo e chamar, passando como parâmetro o xpath e também o id do elemento:
Public Function getXPathElement(sXPath As String, objElement As Object) As HTMLBaseElement
Dim sXPathArray() As String
Dim sNodeName As String
Dim sNodeNameIndex As String
Dim sRestOfXPath As String
Dim lNodeIndex As Long
Dim lCount As Long
' Split the xpath statement
sXPathArray = Split(sXPath, "/")
sNodeNameIndex = sXPathArray(1)
If Not InStr(sNodeNameIndex, "[") > 0 Then
sNodeName = sNodeNameIndex
lNodeIndex = 1
Else
sXPathArray = Split(sNodeNameIndex, "[")
sNodeName = sXPathArray(0)
lNodeIndex = CLng(Left(sXPathArray(1), Len(sXPathArray(1)) - 1))
End If
sRestOfXPath = Right(sXPath, Len(sXPath) - (Len(sNodeNameIndex) + 1))
Set getXPathElement = Nothing
For lCount = 0 To objElement.ChildNodes().Length - 1
If UCase(objElement.ChildNodes().Item(lCount).nodeName) = UCase(sNodeName) Then
If lNodeIndex = 1 Then
If sRestOfXPath = "" Then
Set getXPathElement = objElement.ChildNodes().Item(lCount)
Else
Set getXPathElement = getXPathElement(sRestOfXPath, objElement.ChildNodes().Item(lCount))
End If
End If
lNodeIndex = lNodeIndex - 1
End If
Next lCount
End Function
Aqui está como você pode usá-la:
Set ele = getXPathElement("/table/tbody[3]/tr[1]/td[2]/input[1]", HTMLDoc.getElementById("botaoFlatConfirmar"))
If Len(ele) > 0 Then
ele.Click
End If
Neste exemplo, você informa o xpath do objeto
(getXPathElement("/table/tbody[3]/tr[1]/td[2]/input[1]")) e o ID do elemento a ser acessado (HTMLDoc.getElementById("botaoFlatConfirmar")).
Certifique-se de verificar o xpath corretamente. O ID já foi fornecido para você.
Nenhum comentário
Comente só assim vamos crescer juntos!
Observação: somente um membro deste blog pode postar um comentário.