• 0
Sign in to follow this  
Bruno Luigi

VBA e Internet Explorer - Dados da página não atualizam

Question

Olá, estou usando um código VBA para pegar uma informação de uma página web.

O código VBA segue os seguintes passos:

1. Abre uma página web (a página default mostra os dados para a data de ontem 11/04/2018)

2. Preenche o campo de data com o valor 09/04/20214

3. Clica no botão OK

4. Pega um valor da página que foi carregada depois do clique no botão OK

O problema é que o valor retornado não é o valor que foi atualizado depois do clique do botão e sim o valor que já estava na página default.

A página mostrada no IE está com o valor atualizado mas o retorno do código tem o valor antigo.

O código é de novato e que adaptou a partir de buscas na internet.

Obrigado pela ajuda.

Dim IE As Object
Dim objElement As Object
Dim objColletion1 As Object
Dim objColletion2 As Object
Dim x As Object
Dim y As Object
Dim i As Long

'Create Internet Explorer object
Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True

'IE.navigate "http://www.bmfbovespa.com.br/pt_br/servicos/market-data/consultas/mercado-de-derivativos/contratos-em-aberto/por-tipo-de-participante/"
IE.navigate "http://www2.bmf.com.br/pages/portal/bmfbovespa/lumis/lum-tipo-de-participante-ptBR.asp"

sleep (5000) 'wait 5 seconds to load web page


Set objColletion1 = IE.document.getelementsbytagname("input") 'set field in a object

i = 0
While i < objColletion1.Length 'try to find out field named "dData1"
    If objColletion1(i).Name = "dData1" Then
        ' set the date
        objColletion1(i).Value = "09/04/2018" 'a date before today

    End If
    i = i + 1
Wend

Set objColletion2 = IE.document.getelementsbytagname("button") 'set the buttons on page

i = 0
While i < objColletion2.Length 'try to fid out the button to submit
    If objColletion2(i).Type = "submit" And objColletion2(i).Name = "" Then
        'OK button found
        Set objElement = objColletion2(i)
    End If
    i = i + 1
Wend

objElement.Click 'OK button clicked

sleep (5000) 'wait to load  web page

For Each x In IE.document.body.getelementsbytagname("table") 'search for a expected value
    If InStr(x.innertext, "MERCADO FUTURO DE DÓLAR") > 0 Then
        For Each y In x.getelementsbytagname("tr")
            If InStr(y.innertext, "Inv. Não Residente") > 0 Then
                MsgBox y.getelementsbytagname("td")(1).innertext
            End If
        Next y
    End If
Next x

Set IE = Nothing
Set objElement = Nothing
Set objColletion1 = Nothing
Set objColletion2 = Nothing

 

Bruno.

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Olá...

tudo bom... 

tenta alterar as linhas que teem sleep(5000) para:

Do Until IE.ReadyState = 4

      sleep(500)

Loop

 

Explicação:

Como você esta trabalhando com os objetos Internet Explorer e a página, o seu código tem que "conversar" tanto com o IE como com a página.

 

Depois disso me informa, no mais parece esta tudo certo.

 

Saudações,

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this