Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Interação VBA com Internet Explorer (dúvidas)

Perguntas e Repostas sobre os artigos, posts e arquivos que são postados no site
maurojunior89
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Qui Out 10, 2013 5:22 pm

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por maurojunior89 »

Amigo até já conseguir clicar nesse botão de gerar "CSV" o problema e que quando clico ele pergunta se eu quero abrir, salvar ou salvar como.


Ai que está o problema, já tentei até achar no IE a opção para deixar salvar como o opção padrão mais não achei.

Da uma olha no codido:

Código: Selecionar todos

Sub Consolida_SUAS()
  
    Dim ie As New InternetExplorer
    Dim elemCollection, obj As Object
    Dim CurrentWindow As HTMLWindowProxy
    Dim objShellWindows As New SHDocVw.ShellWindows
    Dim i_URL, i_URL_2
    Dim munic, x, t, q, r, c, cod, contador, feitos, tabelas, table, linhas, linhas_tabela, linhas_feitas As Integer
    
    Const lIntervalo As Long = 1000
    
    ie.Navigate "http://aplicacoes.mds.gov.br/suaswebcons/execute.jsf?b=%2AdpotvmubsQbsdfmbtQbhbtNC&event=%2Afyjcjs"
    ie.Visible = True
    
    While Not ie.ReadyState = READYSTATE_COMPLETE
    Wend
    
    On Error Resume Next
       
    ie.Document.all.Item("form:uf").Item(1).Selected = True
    
    Set CurrentWindow = ie.Document.parentWindow
    Call CurrentWindow.execScript("Richfaces.showModalPanel('processando');;A4J.AJAX.Submit('form',event,{'oncomplete':function(request,event,data){Richfaces.hideModalPanel('processando');carregarTooltip();},'similarityGroupingId':'form:j_id98','parameters':{'form:j_id98':'form:j_id98'} } )(workOrderSearchForm)")

    Sleep lIntervalo
    
    For munic = 1 To 22
    
        ie.Document.all.Item("form:municipio").Item(munic).Selected = True
        cod = ie.Document.all.Item("form:municipio").Value
        
        Set CurrentWindow = ie.Document.parentWindow
        Call CurrentWindow.execScript("Richfaces.showModalPanel('processando');;A4J.AJAX.Submit('form',event,{'oncomplete':function(request,event,data){Richfaces.hideModalPanel('processando');carregarTooltip();},'similarityGroupingId':'form:j_id117','parameters':{'form:j_id117':'form:j_id117'} } )(workOrderSearchForm)")
        
        Range("A" & munic).Value = cod
        Sleep lIntervalo
        
        ie.Document.all.Item("form:pesquisar").Click
        
        'ie.Document.all.Item("j_id172:j_id303").Click
        
        Dim btnInput As Object ' MSHTML.HTMLInputElement
        Dim ElementCol As Object ' MSHTML.IHTMLElementCollection
                        
        Set ElementCol = ie.Document.getElementsByTagName("INPUT")

        For Each btnInput In ElementCol
             If btnInput.Value Like "Gerar Relatório CSV" Then
                  btnInput.Click
                  Exit For
             End If
        Next btnInput

    Next munic
    
    ie.Quit
 
    ActiveWorkbook.Save
End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Mikel Silveira Fraga »

Mauro, boa tarde.

Desculpe não responder antes, mas tava meio atarefado. Agora entendi melhor o seu problema. Tentei encontrar uma solução 100% confiável, mas não encontrei nada que fosse simples. Mas consegui criar uma rotina que talvez resolva esse problema.

No site do João Neto, tem um outro artigo que fala sobre Janelas Pop-Up que são ativadas em aglumas páginas.
http://officevbavsto.blogspot.com.br/20 ... as-de.html

Com base nesse artigo, pode-se fazer uma adaptação para simular o comando Alt + S, quando a Janela Pop-Up Download de Arquivos for ativada.

Primeiro é preciso realizar a declaração das API´s abaixo, de preferência em um módulo separado:

Código: Selecionar todos

Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Obs.: Esse comando mencionando acima deve ser utilizado em um Win32/Office32. Caso um dos softwares seja de outra versão, pode consultar o site Ambiente Office, no link http://www.ambienteoffice.com.br/office ... pi_no_vba/.

Em seguida, acrescente o código abaixo, após a click do botão "Gerar Relatório CSV":

Código: Selecionar todos

winHwnd = FindWindow(vbNullString, "Download de Arquivos")
If winHwnd <> 0 Then
     Application.SendKeys "%S", True
End If
Com essa rotina, quando a janela de Download for aberta, será simulado o comando Alt+S na mesma.

Espero que tenha ajudado. Abraços!


maurojunior89
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Qui Out 10, 2013 5:22 pm

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por maurojunior89 »

Opa amigo sem problemas, acabei conseguindo fazer de uma maneira bem simples, usando o iMacros do Mozilla.

Mas já guardei aqui todas suas explicações, pois tenho que fazer diversas rotinas parecidas com essa.

Muito Obrigado!!!!


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por webmaster »

Falando em iMacros, eis o link oficial:

https://addons.mozilla.org/en-US/firefo ... r-firefox/

Valeu a dica!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Edcronos
Manda bem
Manda bem
Mensagens: 122
Registrado em: Qua Abr 02, 2014 2:23 am

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Edcronos »

ola ...

por motivo de aprendizagem aceitei fazer uma planilha para um amigo que gosta de jogos
comecei aqui...
http://www.planilhando.com.br/forum/vie ... 10&t=12425

até fiz uma macro que pega os últimos 10 resultados da quina , mega ou time mania

Código: Selecionar todos

Sub AcessaPagina2()
    Dim iE As InternetExplorer
    Set iE = New InternetExplorer
    
    lot = 3
    
    If lot = 1 Then loter = "quina": tiposn = "b": viveln = 0: bolas = 5
    If lot = 2 Then loter = "megasena": tiposn = "b": viveln = 0: bolas = 6
    If lot = 3 Then loter = "timemania": tiposn = "strong": viveln = 2: bolas = 7

    iE.Navigate "http://www1.caixa.gov.br/loterias/loterias/" & loter & "/" & loter & "_resultado.asp"
    iE.Visible = False     'True    '
    Do Until iE.ReadyState = READYSTATE_COMPLETE  '------------espera carregar a pagina
    Loop
    cn = iE.Document.getElementById("span_conc").innerText
    l = 1
    
    For Ln = cn - 10 To cn
        conc = Ln
        iE.Navigate "javascript:carrega_concurso(" & conc & ");"    '----------seleciona concurso

        For n = 1 To 10000
            Do While iE.Busy   '--<----<---só com o while não funcionou direito
            Loop
        Next

        Cells(l, 1).Value2 = conc
        Set vln = iE.Document.getElementById("menu_concurso_bt_data")    '----------data
        Cells(l, 2).Value2 = vln.getElementsByTagName(tiposn)(niveln).innerText   '-------pega a data
        
        For n = 0 To bolas - 1
            Set vln = iE.Document.getElementById("sorteio1")    '--------------------ordem sorteio
            Cells(l, n + 3).Value2 = vln.getElementsByTagName("li")(n).innerText  '-----valor , lançamento começa em 0
        Next
        l = l + 1
    Next
End Sub
até funciona
mas ele joga loto mania e dessa eu não consegui fazer

também gostaria de saber se essas paginas tem mudanças frequentes que possa tornar essa macro obsoleta muito rápido

sei que tem os resultados completos, mas se quero aprender não posso ir pelo caminho mais fácil.

baixei um dos resultados completos e abri pelo firefox e fiz inspeção para ve como funciona
e oq encontrei foi um monte de <tr><td>

existe uma maneira de contar quantos tem e fazer um loop para procurar oq se quer?

Abr.


Edcronos
Manda bem
Manda bem
Mensagens: 122
Registrado em: Qua Abr 02, 2014 2:23 am

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Edcronos »

já consegui todos os jogos e mais algumas informações da pagina
mas ainda não sei se estou pegando do modo padrão

e as vezes retorna erros por tempo de leitura da pagina


Marconizf
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Ter Ago 12, 2014 9:19 pm

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Marconizf »

Olá, boa noite.

Tenho uma macro que acessa uma página da Secretaria da Fazenda, preenche um formulário e emite uma guia. Funciona perfeitamente.

Ocorre que eu a adaptei para acessar uma página da Caixa Econômica Federal, com finalidade similar. Nesse caso, o código funcionou em parte: preenche corretamente a primeira parte do formulário, mas na hora de passar para a próxima etapa (próxima tela) o código não funciona.

Na próxima tela também tenho o mesmo problema, não consegui dar um click em qualquer dos botões.

Pesquisei no código fonte da página mas não consegui identificar os nomes (ID) dos botões. Tentei então o comando .Document.all("frm").submit, sem sucesso.

Fico muito grato caso possam me ajudar.

Abs.

Código: Selecionar todos

Public Sub Imprimir_1()
On Error Resume Next
Dim Endereço As String
Dim Endereço2 As String
Dim MyBrowser As SHDocVw.InternetExplorer
Dim SWs As New SHDocVw.ShellWindows

Endereço = "http://www.grfrecursal.caixa.gov.br/sisfg/pages/sfg/recursal/iniciar.jsf"
Endereço2 = "http://www.grfrecursal.caixa.gov.br/sisfg/pages/sfg/recursal/recolhimento.jsf"
Set ie = CreateObject("InternetExplorer.Application")
ie.Navigate (Endereço)
ie.Visible = True
ie.Document.Forms.Item("frm").Item(2).Value = "04740876000125" 'CNPJ

While ie.ReadyState <> 4
Wend
ie.Document.Forms.Item("frm").Item(3).Value = "Razão Social" 'Razão Social
While ie.ReadyState <> 4
Wend
ie.Document.Forms.Item("frm").Item(4).Value = "Marconi" 'Nome de Contato
While ie.ReadyState <> 4
Wend
ie.Document.Forms.Item("frm").Item(5).Value = "9999999999" 'Telefone de Contato
While ie.ReadyState <> 4
Wend
ie.Document.Forms.Item("frm").Item(9).Value = "04740876000125" 'CNPJ

While ie.ReadyState <> 4
Wend

ie.Document.all("frm").submit

Application.ScreenUpdating = True
End Sub


Marconizf
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Ter Ago 12, 2014 9:19 pm

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Marconizf »

Question
Você não pode votar em sua própria postagem
0

Olá, boa noite.

Felizmente consegui avança no código. Consegui avança para a próxima etapa do formulário. Finalmente, falta somente descobri o comando para gerar a guia, ou seja, clicar no botão "Gera Guia".

Acredito que a solução esteja neste trecho do código fonte:

<div class="botoes_linha" style="height:70px; top:110px"> <div style="; margin-left:594px; "><a href="#" onmouseup="refresh(10000)" tabindex="19" type="submit" onclick="var a=function(){if (! validateFormLocal()) {return false};A4J.AJAX.Submit('frm',event,{'parameters':{'ajaxSingle':'frm:j_id141','frm:j_id142':'frm:j_id142'} ,'similarityGroupingId':'frm:j_id142'} );};var b=function(){if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('frm'),{'frm:j_id141':'frm:j_id141'},'');}return false};return (a()==false) ? false : b();" type="submit"> <img src="../../../imagens/bt_gerar_guia.jpg" border="0" alt="bot&atilde;o continuar" /></a>

Mais uma vez, agradeço antecipadamente aqueles que puderem me ajuda.


Marconizf
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Ter Ago 12, 2014 9:19 pm

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Marconizf »

Ninguém para ao menos me dá uma dica? O acesso ao form está perfeito, somente preciso entender aquela função do código fonte, que executa o click para download do formulário.

vlw.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Mikel Silveira Fraga »

Boa noite a todos os amigos do fórum.

Marconi, recebi seu email e peço desculpas por não ter dado atenção anteriormente, mas realmente a coisa esta muito corrida pra mim, mas vamos ao seu problema.

Pude perceber que o foco do seu código era acessar o Botão para Gerar Guias da segunda página, o qual você estava tentando com a linha abaixo:

Código: Selecionar todos

ie.Document.all("frm").submit
Dessa forma não iria dar certo. A dificuldade de acessar os botões como este, esta no fato do evento esta todo descrito em JavaScript e Ajax, onde se torna difícil realizar a conexão com o objeto. Mas como estamos falando de um link, arrumei outra forma de acessar o botão. Vamos forcar no código abaixo:

Código: Selecionar todos

<a href="#" onmouseup="refresh(10000)" tabindex="19" type="submit" onclick="var a=function(){if (! validateFormLocal()) {return    false};A4J.AJAX.Submit('frm',event,{'parameters':{'ajaxSingle':'frm:j_id141','frm:j_id142':'frm:j_id142'} ,'similarityGroupingId':'frm:j_id142'} );};var b=function(){if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('frm'),{'frm:j_id141':'frm:j_id141'},'');}return false};return (a()==false) ? false : b();" type="submit"> <img src="../../../imagens/bt_gerar_guia.jpg" border="0" alt="bot&atilde;o continuar" /></a>
O que fiz foi utilizar como identificador a Tag "a", que é um link em HTML, e testar o valor da sua propriedade "TabIndex", resultando no código abaixo:

Código: Selecionar todos

For Each link In ie.Document.getElementsByTagName("a")
    MsgBox link.tabindex
    If link.tabindex = 19 Then
        link.Click
    End If
Next
Nos testes aqui funcionou. Veja se era esse mesmo o seu problema, ok!

Abraços a todos e tenham uma boa noite.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder