Página 1 de 1

Acessar Frame via VBA Excel

Enviado: Sex Set 22, 2017 9:26 am
por gttj
Prezados,

Estou tentando acessar um Frame que esta dentro de de um Framset que, por sua vez, esta dentro de um Iframe. Consigo chegar até o iframe, mas, não consigo passar a diante. DFetalhes de como está o código da página Web seguem em anexo.

Obs.: Estou me utilizando de somente VBA Excel, ou seja, não estou me utilizando de subterfúgio, como o Selenium, por exemplo.

Desde já grato pela a atenção de todos, :D

Re: Acessar Frame via VBA Excel

Enviado: Sex Set 22, 2017 9:35 am
por Mikel Silveira Fraga
Gttj, bom dia.

Você esta utilizando o Selenium (Basic ou VBA) ou o Internet Control?

Caso esteja utilizando o Selenium Basic, veja esse artigo/vídeo do Tomás:
- SELENIUM VBA – COMO EXTRAIR DADOS DE FRAMES

Demais dúvidas, a disposição.

Re: Acessar Frame via VBA Excel

Enviado: Sex Set 22, 2017 9:54 am
por gttj
Prezado,

Estou utilizando Internet Control.

Att,

Re: Acessar Frame via VBA Excel

Enviado: Sex Set 22, 2017 1:41 pm
por webmaster
Este exemplo deve ajudar:

Código: Selecionar todos

Dim elemCollection As IHTMLElementCollection

Set elemCollection = objDoc.frames("iFrameID").document.all
Debug.Print elemCollection.Item("pagemenuli-adv").innerText

Re: Acessar Frame via VBA Excel

Enviado: Sex Set 22, 2017 5:43 pm
por gttj
Tomás,

Não tenho Id do Iframe, mas name "supervisaoFrame", já o name frame em que desejo acessar é "esq" e o item dentro dele é tem id "segundo"

iframe algumas propriedades: name = "supervisaoFrame" e src = "supervisao.jsp" -> Até qui eu acesso

frame algumas propriedades: name = "esq" e src = É uma url de sessionid -> Dentro dele é que tenho o elemento que quero acessar que possui o id = "segundo"

Note a imagem abaixo o elemento em que quero clicar

Tentei: Set elemCollection = browser.frames("esq").document.all -> Estou aplicando o name do Frame
Debug.Print elemCollection.Item("segundo").innerText -> Dá erro de "O Objeto não aceita propriedade ou método"

Desde já agradeço,

Re: Acessar Frame via VBA Excel

Enviado: Ter Set 26, 2017 9:59 am
por PRMPOKER
Bom dia meu amigo, tudo bem?

Posso te indicar duas possíveis soluções para teu problema. Utilizo uma função que permite utilizar xpath no IE, e funciona muito bem. Como a tag <TD> que você quer acessar possui ID, possivelmente funcionará para você. Também há uma maneira mais simples de acessar o frame, mas não funciona com todas as estruturas. Quando eu chegar em casa à noite, eu te explico aqui como podemos tentar solucionar.

Um abraço!

Re: Acessar Frame via VBA Excel

Enviado: Seg Out 02, 2017 10:30 am
por gttj
PRMPOKER

Gostei desta solução, xpath no IE, poderia postar um exemplo por gentileza.

Grato, :D

Re: Acessar Frame via VBA Excel

Enviado: Ter Out 03, 2017 12:19 pm
por PRMPOKER
Bom dia gttj,

Desculpe pela absoluta falta de tempo. Pretendo postar sim, hoje à noite, um exemplo prático para te ajudar.

Um abraço!

Re: Acessar Frame via VBA Excel

Enviado: Ter Out 03, 2017 9:50 pm
por PRMPOKER
Boa noite meu amigo, tudo bem?

Então, vamos lá: eu utilizo essa função, que permite a utilização do xpath:


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


E faço a chamada dela para o elemento que eu quero acessar, conforme abaixo:

Set ele = getXPathElement("/form/table/tbody/tr[1]/td[2]/input[1]", HTMLDoc.getElementById("Layer6"))
If Len(ele) > 0 Then
'Sua ação para o objeto
End If

Aqui vc informa o xpath do objeto: (getXPathElement("/form/table/tbody/tr[1]/td[2]/input[1]")
Aqui vc informa o ID do elemento a ser acessado: (HTMLDoc.getElementById("Layer6")))

Não sei se expliquei bem. Conseguiste entender?

:)

Re: Acessar Frame via VBA Excel

Enviado: Qui Out 05, 2017 10:32 am
por PRMPOKER
Bom dia meu amigo, tudo bem?

Conseguiste resolver o problema? Dá um retorno pra gente aí!

:D :D :D