Página 1 de 1

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

Enviado: Qua Jul 22, 2020 4:52 pm
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

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

Enviado: Qua Jul 22, 2020 7:53 pm
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

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

Enviado: Qua Jul 22, 2020 11:45 pm
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. ;)

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

Enviado: Qui Jul 23, 2020 12:13 am
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

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

Enviado: Qui Jul 23, 2020 12:55 am
por ernandoal
Muito obrigado mesmo! Vou estudar sim. :D