|
Python: Como corrigir o erro de atributo find_element_by_xpath no Selenium | |
| @CanalQb | ||
Erro find_element_by_xpath no Selenium WebDriver: como resolver corretamente
Se você está enfrentando o erro AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath' ao usar Selenium com Python, a causa provavelmente está relacionada ao uso de métodos obsoletos. A biblioteca Selenium deixou de suportar métodos como find_element_by_xpath a partir da versão 4.3.0.
Para evitar esse erro, o código precisa ser atualizado para usar o novo formato recomendado. Neste post, mostramos como fazer essa transição corretamente e garantir que seu código continue funcional.
Importando o WebDriver corretamente no Selenium
O primeiro passo é importar corretamente os módulos necessários no início do seu script. Certifique-se de ter a instalação atualizada do Selenium e use os imports corretos:
from selenium import webdriver from selenium.webdriver.common.by import By
Depois disso, crie uma instância do navegador com a classe desejada:
browser = webdriver.Chrome()
Atualizando o uso de métodos obsoletos no Selenium
O método find_element_by_xpath() deve ser substituído por find_element() com o argumento By.XPATH. Veja como fica o código atualizado:
from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Chrome() elemento = browser.find_element(By.XPATH, '//span[@id="faucet_balance"]')
Com essa alteração, seu script funcionará com as versões mais recentes da biblioteca.
Exemplo prático: Verificando saldo de faucet com Selenium
Abaixo segue um exemplo completo de como utilizar essa nova abordagem para acessar e interpretar valores da web, como saldo de um faucet:
from selenium import webdriver from selenium.webdriver.common.by import By import time browser = webdriver.Chrome() while True: try: faucet_balance = browser.find_element(By.XPATH, '//span[@id="faucet_balance"]') balance_value = float(faucet_balance.text) if balance_value >= 0.001: browser.get("https://knolix.com/faucet_payout.php?cmd=out") elif balance_value <= 0.001: print(faucet_balance.text) break except: time.sleep(1)
Esse código acessa o elemento pelo seu XPath, converte o valor em número de ponto flutuante e executa uma ação com base no valor encontrado. Note que o laço while garante que o script espere até que o elemento esteja disponível.
Boas práticas e recomendações para automação com Selenium
Para evitar erros em tempo de execução, considere as boas práticas abaixo:
- Use o método
WebDriverWaitpara esperar por elementos dinâmicos. - Evite o uso de métodos obsoletos ou removidos.
- Trate exceções de forma adequada, especialmente ao acessar elementos em páginas que carregam dinamicamente.
Exemplo com espera explícita:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(browser, 10) faucet_balance = wait.until(EC.visibility_of_element_located((By.XPATH, '//span[@id="faucet_balance"]')))
Links úteis e recomendados para desenvolvedores
Conclusão: atualize seu Selenium e evite erros comuns
Manter suas bibliotecas atualizadas e seguir as recomendações da documentação oficial ajuda a evitar erros como o AttributeError mostrado neste post. Migrar para a nova sintaxe com By é simples e essencial para garantir a continuidade dos seus scripts de automação.
Este conteúdo é voltado a desenvolvedores que utilizam Selenium em projetos de automação, raspagem de dados e testes web.
Aviso sobre responsabilidade em automações financeiras
Atenção: Caso este código seja aplicado em projetos que envolvam ganhos financeiros, pagamentos ou recebimentos automáticos, recomendamos avaliação criteriosa. Nenhuma automação garante lucros e os riscos são de responsabilidade do usuário. Sempre faça testes seguros antes de aplicar em ambientes reais.

Comentários
Comente só assim vamos crescer juntos!