Aprenda por que o Selenium pode não encontrar elementos usando nomes de classe e XPaths complexos, e como usar efetivamente seletores CSS com WebDriverWait para extrair dados de páginas web dinâmicas.
---
Visite esses links para conteúdo original e mais detalhes, como soluções alternativas, atualizações/desenvolvimentos mais recentes sobre o tema, comentários, histórico de revisões etc. Por exemplo, o título original da pergunta foi: Por que o Selenium não encontra elementos?
Se algo parecer errado para você, sinta-se à vontade para deixar um comentário abaixo deste vídeo.
---
Visão Geral do Problema
Ao fazer scraping de sites com Selenium, um problema comum é não obter resultados ao tentar encontrar elementos. Isso geralmente acontece porque:
Os elementos-alvo não correspondem aos seletores especificados (nomes de classe ou XPath).
Os elementos ainda não estão carregados quando a busca é realizada.
XPaths complexos ou frágeis podem quebrar facilmente com mudanças na estrutura do site.
Por que Seu Código Pode Retornar Sem Saída
No exemplo, os elementos foram localizados usando:
[[Veja o Vídeo para Revelar este Texto ou Trecho de Código]]
Isso é problemático porque By.CLASS_NAME aceita apenas um nome de classe, não múltiplos. Usar dois nomes de classe juntos faz com que falhe.
Além disso, usar um XPath absoluto dentro de cada elemento da casa é frágil e provavelmente quebrará se o layout da página mudar.
Uma Abordagem Melhor e Mais Confiável
Use Seletores CSS em vez de nomes de classe ou XPaths complexos
Seletores CSS permitem direcionar elementos por combinação de atributos e hierarquia de forma clara e sucinta.
Aguarde os Elementos Aparecerem
Páginas web frequentemente carregam dados dinamicamente. Use WebDriverWait e expected_conditions para esperar até que os elementos estejam presentes antes de extrair dados.
Código de Exemplo
[[Veja o Vídeo para Revelar este Texto ou Trecho de Código]]
Por que Isso Funciona Melhor
Seletor CSS: Direciona cada listagem de casa (div[data-testid=result-item]) e seu título <h2> diretamente.
WebDriverWait: Garante que o Selenium espere até que os elementos apareçam na página.
Extração de Texto Robusta: etext() lida com casos onde .text pode estar vazio, mas textContent contém os dados.
Resumo
Para evitar que o Selenium falhe em encontrar elementos:
Evite combinar múltiplas classes em By.CLASS_NAME — em vez disso, use By.CSS_SELECTOR.
Prefira seletores CSS ou XPath relativo em vez de XPath absoluto.
Use esperas explícitas (WebDriverWait) para lidar com conteúdo dinâmico da página.
Essa abordagem leva a scripts de web scraping mais confiáveis e manuteníveis.