Notifications
Clear all

VBA Interagindo com Internet Explorer

2 Posts
1 Usuários
0 Reactions
1,550 Visualizações
(@nill2013br)
Posts: 19
Active Member
Topic starter
 

Amigos,

Estou adaptando este código para o meu uso:
'Inclui referência ao Microsoft Internet Controls

Sub lReferenciaIE()
    Dim ObRef
    On Error Resume Next

    ThisWorkbook.VBProject.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1
End Sub

Sub lsPesquisarCEPFaixa()
    'Inclui a referência se não houver
    lReferenciaIE
    
    Dim IE                  As InternetExplorer
    Dim lCidade             As String
    Dim lUF                 As String
    Dim lUltimaLinhaAtiva   As Long
    Dim lContador           As Long
    
    'Identifica a última célula ativa da lista
    lUltimaLinhaAtiva = Worksheets("Plan1").Cells(Worksheets("Plan1").Rows.Count, 1).End(xlUp).Row
    
    'Cria um objeto Internet Explorer
    Set IE = New InternetExplorer
        
    'Torna o objeto visível
    IE.Visible = True

    'Faz um loop por todas as linhas da planilha
    For lContador = 2 To lUltimaLinhaAtiva
        'Navega ao site dos correios
        IE.Navigate "http://www.buscacep.correios.com.br/servicos/dnec/menuAction.do?Metodo=menuFaixaCep"
        
        'Identifica se a página já foi totalmente carregada
        While IE.ReadyState <> READYSTATE_COMPLETE
        Wend
        
        'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
        'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
        'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
        'mais rápida a execução.
        sng = Timer
        Do While sng + 3 > Timer
        Loop
        
        'Carrega os dados de cidade e UF que serão preenchidos na página
        lCidade = Range("B" & lContador).Value
        lUF = Range("A" & lContador).Value
        
        'Carrega os dados de cidade e UF na página e submente os dados do formulário
        IE.Document.all("Localidade").innertext = lCidade
        IE.Document.all("UF").Value = lUF
        IE.Document.forms("Geral").submit
       
        'Identifica se a página já foi totalmente carregada
        While IE.ReadyState <> READYSTATE_COMPLETE
        Wend

        'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
        'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
        'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
        'mais rápida a execução.
        sng = Timer
        Do While sng + 3 > Timer
        Loop
       
        'Faz um loop pelos objetos do tipo table na página e procura pelo campo Faixa(s) de CEP: preenchido.
        'Em seguida busca pela segunda coluna da linha de faixa de CEP e armazena esta informação diretamente na coluna C da linha
        'da planilha
        For Each i In IE.Document.body.getElementsByTagName("table")
            If InStr(i.innertext, "Faixa(s) de CEP:") > 0 Then
                For Each l In i.getElementsByTagName("tr")
                    If InStr(l.innertext, lCidade) Then
                        Range("C" & lContador).Value = l.getElementsByTagName("td")(1).innertext
                    End If
                Next l
            End If
        Next i
    Next lContador
    
    MsgBox "Concluído!"
End Sub

E cheguei em um link que não sei como extrair a informação dele para salvar em uma planilha. O meu código esta assim: 
'Inclui referência ao Microsoft Internet Controls
Sub lReferenciaIE()
    Dim ObRef
    On Error Resume Next

    ThisWorkbook.VBProject.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1
End Sub
Sub lsConsultaPropostaSiconv()
    'Inclui a referência se não houver
    lReferenciaIE
    
    Dim IE                  As InternetExplorer
    Dim lProposta           As String
    Dim lUltimaLinhaAtiva   As Long
    Dim lContador           As Long
    
    'Identifica a última célula ativa da lista
    lUltimaLinhaAtiva = Worksheets("Plan1").Cells(Worksheets("Plan1").Rows.Count, 1).End(xlUp).Row
    
    'Cria um objeto Internet Explorer
    Set IE = New InternetExplorer
        
    'Torna o objeto visível
    IE.Visible = True

    'Faz um loop por todas as linhas da planilha
    For lContador = 1 To lUltimaLinhaAtiva
        'Navega ao site Siconv
        IE.Navigate "https://www.convenios.gov.br/siconv/proposta/ConsultarProposta/ConsultarProposta.do"
        
        'Identifica se a página já foi totalmente carregada
        While IE.ReadyState <> READYSTATE_COMPLETE
        Wend
        
        'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
        'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
        'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
        'mais rápida a execução.
        sng = Timer
        Do While sng + 3 > Timer
        Loop
        
        'Carrega os dados da proposta que serão preenchidos na página
        lProposta = Range("A" & lContador).Value
                
        'Carrega os dados da proposta na página e submete os dados do formulário
        IE.Document.all("numeroProposta").innertext = lProposta
        IE.Document.forms("consultarPropostaPreenchaOsDadosDaConsultaConsultarForm").submit
       
        'Identifica se a página já foi totalmente carregada
        While IE.ReadyState <> READYSTATE_COMPLETE
        Wend

        'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
        'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
        'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
        'mais rápida a execução.
        sng = Timer
        Do While sng + 3 > Timer
        Loop
       
        'Faz um loop pelos objetos do tipo table na página e procura pelo campo Faixa(s) de CEP: preenchido.
        'Em seguida busca pela segunda coluna da linha de faixa de CEP e armazena esta informação diretamente na coluna C da linha
        'da planilha
        For Each i In IE.Document.body.getElementsByTagName("table")
            If InStr(i.innertext, "Situação") > 0 Then
                For Each l In i.getElementsByTagName("status")
                    If InStr(l.innertext, lProposta) Then
                        Range("B" & lContador).Value = l.getElementsByTagName("status")(1).innertext
                    End If
                Next l
            End If
        Next i
    Next lContador
    
    MsgBox "Concluído!"
End Sub

O problema esta na extração de uma informação que quando abro no inspecionar do Internet Explorer aparece neste formato que se selecionado leva a uma outra pagina: <a href=""/siconv/ConsultarProposta/ResultadoDaConsultaDePropostaDetalharProposta.do?idProposta=1277537&destino=&idConvenio=652368">" e o texto a ser extraído é este: Em execução que precisa ser salvo em uma planilha. Este texto varia conforme o andamento no sistema. Vocês podem me ajudar com isto? Tentei carregar imagem da onde que extrair a informação para salvar em uma planilha. Agradeço a atenção, Nilton.

 
Postado : 09/02/2018 6:10 am
(@nill2013br)
Posts: 19
Active Member
Topic starter
 

Com muita pesquisa e testes descobri que usando o a que antecede o href funcionou. A parte final do código ficou assim:

For Each i In IE.Document.body.getElementsByTagName("table")
            If InStr(i.innertext, "Situação") > 0 Then
                For Each l In i.getElementsByTagName("tr")
                    If InStr(l.innertext, lProposta) Then
                        Range("B" & lContador).Value = l.getElementsByTagName("a")(1).innertext

O artigo que usei como base para chegar a esta solução é o deste link: https://stackoverflow.com/questions/477 ... m-href-tag

 
Postado : 09/02/2018 1:39 pm