Srs, tenho o objetivo de captar as ultimas noticias de algumas empresas no site da bolsa.
Meu problema surge quando nao tem noticia; o selenium me fornece uma mensagem de erro que não consigo contornar dado que o elemento que ele está procurando não existe.
existe um 'on error goto' em casos de erros no selenium? ou consigo identificar de antemao se o elemento está la presente?
Public Sub empresas()
Dim noticia(1 To 100, 1 To 100, 1 To 2) As Variant
Dim j As Integer
i = 4
j = 1
While Cells(i, 2) <> ""
Dim selenium As New SeleniumWrapper.WebDriver
selenium.Start "ie", "http://bvmf.bmfbovespa.com.br/"
selenium.Open "/pt-br/mercados/acoes/empresas/FormConsultaPlantaoNoticias.asp?CodCVM=906&Periodo=dia"
While j <> 1000
On Error GoTo abc
noticia(i, j, 1) = selenium.getText("//tr[" & j & "]/td[3]/a")
noticia(i, j, 2) = selenium.getText("//tr[" & j & "]/td[2]")
j = j + 1
Wend
abc:
selenium.stop
j = 1
i = i + 1
Wend
End Sub
Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Identificar se elemento existe ou nao
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Identificar se elemento existe ou nao
Bobadilha, boa noite. Tudo bem?
Cara, entrei no site e fiz um teste até encontrar um caso como o descrito por você. Quando nenhuma notícia é encontrada, o elemento abaixo aparece na página:
Nesse caso, você pode fazer uma contagem desse elemento e, caso o mesmo exista, ou seja, se for maior que 0, a rotina não será executada. Para identificar esse elemento de maneira mais fácil, podemos utilizar uma Expressão xPath dos elementos e o método findElementsByXPath do Selenium:
Dessa forma, você vai conseguir prever em sua pesquisa, a existência ou não de notícias, evitando que sua rotina gere um erro em tempo de execução ou algo do tipo.
Espero ter sido claro e objetivo.
Abraços e bom descanso.
Cara, entrei no site e fiz um teste até encontrar um caso como o descrito por você. Quando nenhuma notícia é encontrada, o elemento abaixo aparece na página:
Código: Selecionar todos
<div data-alert="" class="alert-box secondary">Nenhuma notícia encontrada neste período.</div>
Código: Selecionar todos
If selenium.findElementsByXPath("//div[@class='alert-box secondary']").Count <= 0 Then
' Realiza as rotinas normais que você precisa fazer.
Else
' Pode ser utilizado para exibir alguma mensagem, caso deseje.
End If
Espero ter sido claro e objetivo.
Abraços e bom descanso.