How to manipulate IE objects that do not contain an ID? VBA Access

0

Good afternoon, I'm not able to manipulate (import value) objects (textbox) from an IE page, as these objects do not have ID. Here is the code I'm using

Dim IE As InternetExplorer
Dim Ulogin As Boolean, ieForm
Dim NumProc As String: NumProc = Me.ComarcaProcesso
Dim Email As String: Email = "[email protected]"
Dim Senha As String: Senha = "123456"

 Set IE = New InternetExplorer
 Set IE = CreateObject("InternetExplorer.Application")

 'Abre o IE maximizado.
  IE.Visible = True
  IE.navigate "http://www.tjrs.jus.br/site/processos/tjrs_push/"
  apiShowWindow IE.hwnd, SW_MAXIMIZE

 'Espera até que a página esteja totalmente carregada.
 Do Until IE.ReadyState = READYSTATE_COMPLETE
 Loop

 'Nessa parte você deve conhecer a propriedade "name" dos elementos input do site que irá logar.
  IE.Document.all("email").innerText = Email
  IE.Document.all("senha").innerText = Senha

 'Nessa parte você deve informar o nome (propriedade name) do formulário a ser submetido.
  IE.Document.all("login").Click

    Do
    'Coloca o nome do campo usuário do form na página.
     IE.Document.all("input_num_themis").innerText = NumProc

     DoCmd.GoToRecord , , acNext
    Loop

End Sub
    
asked by anonymous 26.03.2018 / 18:35

1 answer

1

If you inspect the element, you'll notice that the fields you want to edit are within iframe , whose source is /proc/sistema_push/ . Therefore, to reference the email and password fields, you must first reference iframe . To fetch the iframe, we will iterate the page iframes, and compare the URL. Note that the src attribute contains a relative path, but the value returned by the URL attribute of the iframe is absolute, so we'll add the domain of the Court site in the comparison term.

I'm just adding a variable (Cont) and a for statement block.

Come on:

Sub MacacoLoko()
    Dim IE As InternetExplorer
    Dim docHTML As HTMLDocument
    Dim Ulogin As Boolean, ieForm
    Dim NumProc As String: NumProc = Me.ComarcaProcesso
    Dim Email As String: Email = "[email protected]"
    Dim Senha As String: Senha = "123456"
    Dim Cont As Variant 'Vai ser o marcador para iterar as iframes em busca da correta (embora esse site só tenha uma, outros sites de tribunais podem ter mais, ou o site pode ser reformulado)

    Set IE = New InternetExplorer
    Set IE = CreateObject("InternetExplorer.Application")

    'Abre o IE maximizado.
     IE.Visible = True
     IE.navigate "http://www.tjrs.jus.br/site/processos/tjrs_push/"
     apiShowWindow IE.Hwnd, SW_MAXIMIZE

    'Espera até que a página esteja totalmente carregada.
    Do Until IE.readyState = READYSTATE_COMPLETE
    Loop

    'Itera as iframes, buscando a correta (no nosso caso, procuraremos pelo atributo "src" da tag "iframe".
    For Each Cont In IE.Document.getElementsByTagName("iframe")
       If Cont.src = "http://www.tjrs.jus.br/proc/sistema_push/" Then Set docHTML = Cont 'Atribuímos docHTML à iframe correta. Importante: O atributo "src" no HTML da página está em caminho relativo, mas a URL da frame tem que ser buscada com a URL completa.
    Next Cont

    'Nessa parte você deve conhecer a propriedade "name" dos elementos input do site que irá logar.
     docHTML.all("email").innerText = Email
     docHTML.all("senha").innerText = Senha

    'Nessa parte você deve informar o nome (propriedade name) do formulário a ser submetido.
     IE.Document.all("login").Click

   'Daqui pra frente eu não testei; talvez seja necessário reatribuir o "dochtml", caso o número do processo esteja dentro de outra iframe, mas você já entendeu como se faz isso.
   Do
   'Coloca o nome do campo usuário do form na página.
    IE.Document.all("input_num_themis").innerText = NumProc

    DoCmd.GoToRecord , , acNext
   Loop

End Sub
    
29.04.2018 / 17:43