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

Selenium + VBA - Ler item em ListBox e Campos de Datas

A Web está aí, não há como negar. Ela é onipresente em praticamente toda operação eletrônica realizada nos dias de hoje. Como não podia ser diferente, o Excel, ferramenta máxima para analistas e profissionais das mais diversas áreas do mercado precisa estar alinhado com esta necesssidade. E ele está! Neste forum, o debate é focado em expor dúvidas, sugestões, modelos de código e exemplos de uso do Excel na Integração com tecnologias Web.
ernandoal
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Ter Jul 21, 2020 9:06 pm

Selenium + VBA - Ler item em ListBox e Campos de Datas

Mensagem por ernandoal »

Pessoal, estou quebrando a cabeça e não encontrei essa explicação em lugar algum. Estou montando um código VBA com Selenium pra ler do site da B3 e buscar cotações, só que lá tem um componente de ListBox com algumas opções e um Seletor de Datas. Tentei de tudo pra ler e preencher através dos comandos do Selenium e não dá certo, não encontro o objeto. Segue meu código abaixo e erro apresentado pelo VBA, alguém já fez esse tipo de consulta e poderia ajudar?

Erro em tempo de execução '7':

NosuchElementError
Element not found for
XPath=//*[@id=""divContainerIframeBmf""]/form/div/div/div[1]/div[1]/di

Código VBA Utilizado:

Sub ConsultaB3Cot()
Set Driver = New ChromeDriver

Driver.Get "http://www.b3.com.br/pt_br/market-data- ... -fbovespa/"
Application.Wait Now + TimeValue("00:00:03")

Dim Indexador As String: Indexador = "Real x dólar"
Dim DataSelect As Date: DataSelect = "19/07/2020"

Dim Indice As WebElement, Data As WebElement, dropdown As WebElement

Driver.FindElementByXPath("//*[@id=""divContainerIframeBmf""]/form/div/div/div[1]/div[1]/div/div/select").Click
Driver.FindElementByXPath("//*[@id=""divContainerIframeBmf""]/form/div/div/div[1]/div[1]/div/div/select").SendKeys Indexador

Driver.FindElementByXPath("//*[@id=""Data""]").Click
Driver.FindElementByXPath("//*[@id=""Data""]").SendKeys DataSelect
Driver.FindElementByXPath("//*[@id=""Data""]").Click

If Not Ibovespa Is Nothing Then
Sheets("Cotações").Range("Ibovespa1").Value = Ibovespa.Text
Driver.Quit
MsgBox "Ibovespa atualizado"
Else
Driver.Quit
MsgBox "Ibovespa não encontrado"
End If

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.


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: Selenium + VBA - Ler item em ListBox e Campos de Datas

Mensagem por Raygsson »

Você pode fazer essa captura sem usar o Selenium.
A cada consulta a URL da página é atualizada, os parâmetros de consulta são passados por ela.
Basta acessar a URL com os parâmetros que você deseja que vai gerar os resultados.
Sendo mais eficiente ainda pode fazer essa consulta de URL sem abrir o navegador, por requisição HTTP, e depois apenas trabalhar no arquivo HTML retornado.
Vou postar o código que fiz pra teste, vai precisar ajustar apenas na questão de mudar os parâmetros na URL com variáveis, pra ficar mais dinâmico.

Código: Selecionar todos

Sub Teste()

    Set HtmlReq = CreateObject("WinHttp.WinHttpRequest.5.1")
    HtmlReq.Open "GET", "http://www2.bmf.com.br/pages/portal/bmfbovespa/lumis/lum-taxas-referenciais-bmf-ptBR.asp?Data=21/07/2020&Data1=20200721&slcTaxa=PTX"
    HtmlReq.send
      
    If HtmlReq.Status = 200 Then
        Set HtmlDoc = New MSHTML.HTMLDocument
        HtmlDoc.body.innerHTML = HtmlReq.responseText
        Set linhas = HtmlDoc.getElementsByTagName("td")
        For Each linha In linhas
             Debug.Print linha.innerText
        Next
    End If
    
End Sub
Anexos
cod.JPG
cod.JPG (52.27 KiB) Exibido 4571 vezes
bfm.JPG
bfm.JPG (50.41 KiB) Exibido 4571 vezes


ernandoal
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Ter Jul 21, 2020 9:06 pm

Re: Selenium + VBA - Ler item em ListBox e Campos de Datas

Mensagem por ernandoal »

Esse código é 10!! Me ajudou muito, muito obrigado, consegui fazer o que queria com mais simplicidade e maior velocidade! Não sou tão expert em programação, iniciante de carreira, não consigo descobrir certas coisas com tanta facilidade. Como você chegou nessa URL? Por que pela que eu enviei no meu código não tenho essas informações que tem nessa sua! Gostaria de saber pra entender melhor como obter essas facilidades. ;)


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: Selenium + VBA - Ler item em ListBox e Campos de Datas

Mensagem por Raygsson »

Opa, vou te passar um passo a passo:
-Acesse o site que vai fazer a pesquisa (preferencialmente pelo Chrome)
-Acesse o console do desenvolvedor (F12) + opção Network
-So depois disso faça sua pesquisa no site, os parâmetros vão ficar registrados no Network.
-Clicar no arquivo type document com o metodo POST ou GET, depende.
-Vai mostrar ao lado os parâmetros e a URL consultada por "baixo dos panos".

Pesquise e estude um pouco sobre requisições HTTP com VBA, não é dificil e vai facilitar a vida nesses casos rs
Anexos
F12 - Opção Network.JPG
F12 - Opção Network.JPG (78.99 KiB) Exibido 4471 vezes
POST  ou GET - document.JPG
POST ou GET - document.JPG (106.29 KiB) Exibido 4471 vezes
Clicar - Vai abrir as opções ao lado..JPG
Clicar - Vai abrir as opções ao lado..JPG (108.45 KiB) Exibido 4471 vezes


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.


ernandoal
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Ter Jul 21, 2020 9:06 pm

Re: Selenium + VBA - Ler item em ListBox e Campos de Datas

Mensagem por ernandoal »

Muito obrigado mesmo! Vou estudar sim. :D


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