Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Selenium + VBA - Ler item em ListBox e Campos de Datas
Selenium + VBA - Ler item em ListBox e Campos de Datas
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
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
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.
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 (52.27 KiB) Exibido 4641 vezes
-
- bfm.JPG (50.41 KiB) Exibido 4641 vezes
Re: Selenium + VBA - Ler item em ListBox e Campos de Datas
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
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
-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 (78.99 KiB) Exibido 4541 vezes
-
- POST ou GET - document.JPG (106.29 KiB) Exibido 4541 vezes
-
- Clicar - Vai abrir as opções ao lado..JPG (108.45 KiB) Exibido 4541 vezes