SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
20.04.2025

Trabalhando com DOM no Selenium Python: Busca e Esperas de Elementos

Resposta Rápida

O Selenium oferece métodos como find_elements_by_*, que retornam uma lista vazia se um elemento com o identificador especificado não for encontrado. Isso ajuda a evitar a geração de uma NoSuchElementException.

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://exemplo.com")

# Certifique-se de substituir "element_id" pelo ID correto
if driver.find_elements(By.ID, "element_id"):
    print("Elemento encontrado. Vamos comemorar 🎉")
else:
    print("Elemento não encontrado. Que pena 😞")

Estratégias Eficazes para Busca de Elementos

Prefira Seletores CSS

Os seletores CSS são preferidos devido à sua maior eficiência de busca e melhor legibilidade em comparação ao XPath.

Crie uma Função Universal

Crie uma função universal que verifique a existência de um elemento, independentemente do método utilizado:

# Função universal que economiza seu tempo
def elemento_existe(driver, metodo_busca, seletor):
    return len(driver.find_elements(metodo_busca, seletor)) > 0

Utilize Esperas Explícitas

As esperas explícitas aumentam a confiabilidade e são sempre preferidas em relação ao uso de time.sleep():

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Paciência é a chave para o sucesso 😉
wait = WebDriverWait(driver, 10)
try:
    elemento = wait.until(EC.presence_of_element_located((By.ID, "element_id")))
    print("Elemento está disponível! Vamos comemorar 🎊")
except:
    print("Elemento não encontrado. Hora de repensar as estratégias 👩‍💻")

Manipulação Profissional de Exceções

Aplique uma estrutura try-except para um tratamento elegante de exceções:

from selenium.common.exceptions import NoSuchElementException

try:
    # Verificando a presença de um elemento
    driver.find_element(By.ID, "elemento_inexistente")
    print("Elemento está presente. Estamos no caminho certo! 🥳")
except NoSuchElementException:
    print("Elemento não encontrado. É como procurar uma agulha no palheiro 🙃")

Recomendações Adicionais

  • Busque elementos por ID ou nome.
  • Evite usar LINK_TEXT devido à probabilidade de ser localizado ou alterado.
  • Utilize os recursos do XPath para trabalhar com estruturas de página complexas.
  • Garanta a correção dos argumentos do script para evitar erros.
  • Adicione logs de depuração para monitorar o processo de busca de elementos.
  • Peça aos desenvolvedores para incluir IDs ou nomes únicos, quando possível.
  • Reinicie o valor de espera implícita para seu estado original após a modificação.

Visualização

Imagine que você está procurando flores em um jardim:

Seção do Jardim | Disponibilidade de Flores
---------------------------
Zona 1        | ❌ (Nenhuma flor encontrada 🌼)
Zona 2        | ❌ (Ainda vazia 🌼)
Zona 3        | ✅ (Flor encontrada! 🌼)

Com o Selenium, é simples; ele atua como um detector de flores confiável:

# Seu confiável "detector de flores"
detector_de_flores = driver.find_elements(By.XPATH, "xpath_da_flor")

O detector detecta a presença de uma flor (✅) ou não a detecta (❌).

Dicas para Melhorar o Desempenho

Escrever scripts eficientes economiza tempo, pois cada milissegundo conta.

Uso Racional dos Tempos de Espera

Escolha entre espera implícita, espera explícita ou espera flexível no Selenium:

  • Espera Implícita: Define um limite de tempo antes de desistir de encontrar um elemento.
  • Espera Explícita: Pausa a execução até que uma condição específica seja atendida.
  • Espera Flexível: Define um tempo máximo de espera e frequência para verificar o estado do elemento.

Melhores Práticas

  • Minimize o uso de esperas e aplique-as de forma consciente.
  • Prefira o método find_elements, pois ele não gera exceções quando um elemento está ausente.
  • Lembre-se de fechar o driver usando driver.quit() após a execução do script para evitar problemas indesejados.

Indo Além das Verificações de Existência

Às vezes, encontrar um elemento não é suficiente. Também é importante garantir que ele esteja visível e disponível para interação:

from selenium.webdriver.common.action_chains import ActionChains

# A visibilidade é a condição chave para o funcionamento!
visivel = EC.visibility_of_element_located((By.ID, 'element_id'))
ActionChains(driver).move_to_element(wait.until(visivel)).perform()

Recursos Úteis

  1. 4. Localizando Elementos — Documentação do Selenium Python Bindings 2
  2. WebDriver Waits no Selenium
  3. Selenium C# WebDriver: Espere até que o elemento esteja presente - Stack Overflow
  4. selenium.common.exceptions — Documentação do Selenium 4.17.2
  5. Tutorial de XPath
  6. Referência de Seletores CSS
  7. Automação Web Moderna com Python e Selenium – Real Python

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!