Ir para conteúdo
Fórum Script Brasil
  • 0

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


Bruno Luigi

Pergunta

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.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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,

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...