🥳Junte-se à Comunidade Scrapeless e reivindique sua avaliação gratuita para acessar nossa poderosa ferramenta de raspagem da web!
De volta ao blog

Como usar o ChromeDriver não detectado para Web Scraping

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

17-Mar-2025

Descubra como o Undetected ChromeDriver ajuda a contornar sistemas anti-bot para web scraping, juntamente com orientação passo a passo, métodos avançados e limitações principais. Além disso, aprenda sobre o Scrapeless - uma alternativa mais robusta para necessidades profissionais de scraping.

Neste guia, você aprenderá:

  • O que é o Undetected ChromeDriver e como ele pode ser útil
  • Como ele minimiza a detecção de bots
  • Como usá-lo com Python para web scraping
  • Uso e métodos avançados
  • Suas principais limitações e desvantagens
  • Alternativa recomendada: Scrapeless
  • Análise técnica dos mecanismos de detecção anti-bot

Vamos mergulhar!

O que é o Undetected ChromeDriver?


O Undetected ChromeDriver é uma biblioteca Python que fornece uma versão otimizada do ChromeDriver do Selenium. Isso foi corrigido para limitar a detecção por serviços anti-bot como:

  • Imperva
  • DataDome
  • Distil Networks
  • e mais ...

Ele também pode ajudar a contornar certas proteções do Cloudflare, embora isso possa ser mais desafiador.

Se você já usou ferramentas de automação de navegador como o Selenium, sabe que elas permitem controlar navegadores programaticamente. Para tornar isso possível, eles configuram os navegadores de forma diferente das configurações de usuários comuns.

Os sistemas anti-bot procuram essas diferenças, ou "vazamentos", para identificar bots de navegador automatizados. O Undetected ChromeDriver corrige os drivers do Chrome para minimizar esses sinais reveladores, reduzindo a detecção de bots. Isso o torna ideal para sites de web scraping protegidos por medidas anti-scraping!

Como o Undetected ChromeDriver funciona?


O Undetected ChromeDriver reduz a detecção do Cloudflare, Imperva, DataDome e soluções semelhantes empregando as seguintes técnicas:

  • Renomear variáveis do Selenium para imitar aquelas usadas por navegadores reais
  • Usar strings User-Agent legítimas e do mundo real para evitar detecção
  • Permitir que o usuário simule interação humana natural
  • Gerenciar cookies e sessões corretamente ao navegar em sites
  • Habilitar o uso de proxies para contornar o bloqueio de IP e evitar limitação de taxa

Esses métodos ajudam o navegador controlado pela biblioteca a contornar várias defesas anti-scraping de forma eficaz.

Usando o Undetected ChromeDriver para Web Scraping: Guia passo a passo


Etapa #1: Pré-requisitos e configuração do projeto

O Undetected ChromeDriver possui os seguintes pré-requisitos:

  • Versão mais recente do Chrome
  • Python 3.6+: Se o Python 3.6 ou posterior não estiver instalado em sua máquina, baixe-o do site oficial e siga as instruções de instalação.

Observação: A biblioteca baixa e corrige automaticamente o binário do driver para você, portanto, não há necessidade de baixar o ChromeDriver manualmente.

Crie um diretório para seu projeto:

language Copy
mkdir undetected-chromedriver-scraper
cd undetected-chromedriver-scraper
python -m venv env

Ative o ambiente virtual:

language Copy
# No Linux ou macOS
source env/bin/activate

# No Windows
env\Scripts\activate

Etapa #2: Instale o Undetected ChromeDriver

Instale o Undetected ChromeDriver via pacote pip:

language Copy
pip install undetected_chromedriver

Esta biblioteca instalará automaticamente o Selenium, pois é uma de suas dependências.

Etapa #3: Configuração inicial

Crie um arquivo scraper.py e importe undetected_chromedriver:

language Copy
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import json

# Inicializa uma instância do Chrome
driver = uc.Chrome()

# Conecta-se à página de destino
driver.get("https://scrapeless.com")

# Lógica de scraping...

# Fecha o navegador
driver.quit()

Etapa #4: Implemente a lógica de scraping

Agora vamos adicionar a lógica para extrair dados da página da Apple:

language Copy
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import json
import time

# Cria uma instância do driver web do Chrome
driver = uc.Chrome()

# Conecta-se ao site da Apple
driver.get("https://www.apple.com/fr/")

# Dá algum tempo para a página carregar completamente
time.sleep(3)

# Dicionário para armazenar informações do produto
apple_products = {}

try:
    # Encontra seções de produtos (usando as classes do HTML fornecido)
    product_sections = driver.find_elements(By.CSS_SELECTOR, ".homepage-section.collection-module .unit-wrapper")
    
    for i, section in enumerate(product_sections):
        try:
            # Extrai o nome do produto (título)
            headline = section.find_element(By.CSS_SELECTOR, ".headline, .logo-image").get_attribute("textContent").strip()
            
            # Extrai a descrição (subtítulo)
            subhead_element = section.find_element(By.CSS_SELECTOR, ".subhead")
            subhead = subhead_element.text
            
            # Obtém o link se disponível
            link = ""
            try:
                link_element = section.find_element(By.CSS_SELECTOR, ".unit-link")
                link = link_element.get_attribute("href")
            except:
                pass
            
            apple_products[f"product_{i+1}"] = {
                "name": headline,
                "description": subhead,
                "link": link
            }
        except Exception as e:
            print(f"Erro ao processar a seção {i+1}: {e}")
    
    # Exporta os dados raspados para JSON
    with open("apple_products.json", "w", encoding="utf-8") as json_file:
        json.dump(apple_products, json_file, indent=4, ensure_ascii=False)
    
    print(f"Produtos da Apple raspados com sucesso: {len(apple_products)}")
    
except Exception as e:
    print(f"Erro durante a raspagem: {e}")

finally:
    # Fecha o navegador e libera seus recursos
    driver.quit()

Execute com:

language Copy
python scraper.py

Undetected ChromeDriver: Uso avançado

Agora que você sabe como a biblioteca funciona, está pronto para explorar alguns cenários mais avançados.

Escolha uma versão específica do Chrome

Você pode especificar uma versão específica do Chrome para a biblioteca usar definindo o argumento version_main:

language Copy
import undetected_chromedriver as uc

# Especifica a versão de destino do Chrome
driver = uc.Chrome(version_main=105)

Com sintaxe

Para evitar chamar manualmente o método quit() quando você não precisar mais do driver, você pode usar a sintaxe with:

language Copy
import undetected_chromedriver as uc

with uc.Chrome() as driver:
    driver.get("https://example.com")
    # Resto do seu código...

Limitações do Undetected ChromeDriver

Embora o undetected_chromedriver seja uma biblioteca Python poderosa, ele possui algumas limitações conhecidas:

Bloqueios de IP

A biblioteca não oculta seu endereço IP. Se você estiver executando um script de um data center, é muito provável que a detecção ainda ocorra. Da mesma forma, se seu IP doméstico tiver má reputação, você também poderá ser bloqueado.

Para ocultar seu IP, você precisa integrar o navegador controlado a um servidor proxy, como demonstrado anteriormente.

Devido ao funcionamento interno do módulo, você deve navegar programaticamente usando o método get(). Evite usar a GUI do navegador para navegação manual — interagir com a página usando o teclado ou o mouse aumenta o risco de detecção.

Suporte limitado para modo sem cabeça

Oficialmente, o modo sem cabeça não é totalmente suportado pela biblioteca undetected_chromedriver. No entanto, você pode experimentar usando:

language Copy
driver = uc.Chrome(headless=True)

Problemas de estabilidade

Os resultados podem variar devido a inúmeros fatores. Nenhuma garantia é fornecida, além de esforços contínuos para entender e combater algoritmos de detecção. Um script que contorna com sucesso os sistemas anti-bot hoje pode falhar amanhã se os métodos de proteção receberem atualizações.

Alternativa recomendada: Scrapeless


Dadas as limitações do Undetected ChromeDriver, o Scrapeless oferece uma alternativa mais robusta e confiável para web scraping sem ser bloqueado.

Nós protegemos firmemente a privacidade do site. Todos os dados neste blog são públicos e são usados apenas como demonstração do processo de rastreamento. Não salvamos nenhuma informação e dados.

Por que o Scrapeless é superior

Scrapeless é um serviço de navegador remoto que aborda os problemas inerentes à abordagem Undetected ChromeDriver:

  1. Atualizações constantes: Ao contrário do Undetected ChromeDriver, que pode parar de funcionar após atualizações do sistema anti-bot, o Scrapeless é continuamente atualizado por sua equipe.

  2. Rotação de IP integrada: O Scrapeless oferece rotação automática de IP, eliminando o problema de bloqueio de IP do Undetected ChromeDriver.

  3. Configuração otimizada: Os navegadores Scrapeless já são otimizados para evitar detecção, o que simplifica muito o processo.

  4. Resolução automática de CAPTCHA: O Scrapeless pode resolver automaticamente os CAPTCHAs que você pode encontrar.

  5. Compatível com várias estruturas: Funciona com Playwright, Puppeteer e outras ferramentas de automação.

Acesse o Scrapeless para uma avaliação gratuita.

Leitura recomendada: Como contornar o Cloudflare com o Puppeteer

Como usar o Scrapeless para raspar a web (sem ser bloqueado)

Veja como implementar uma solução semelhante com o Scrapeless usando o Playwright:

Etapa 1: Registre-se e faça login no Scrapeless

Etapa 2: Obtenha a CHAVE DE API do Scrapeless

Obtenha a CHAVE DE API do Scrapeless

Etapa 3: Você pode integrar o seguinte código ao seu projeto

language Copy
const {chromium} = require('playwright-core');

// URL de conexão do Scrapeless com seu token
const connectionURL = 'wss://browser.scrapeless.com/browser?token=YOUR_TOKEN_HERE&session_ttl=180&proxy_country=ANY';

(async () => {
  // Conecta-se ao navegador remoto Scrapeless
  const browser = await chromium.connectOverCDP(connectionURL);
  
  try {
    // Cria uma nova página
    const page = await browser.newPage();
    
    // Navega para o site da Apple
    console.log('Navegando para o site da Apple...');
    await page.goto('https://www.apple.com/fr/', {
      waitUntil: 'domcontentloaded',
      timeout: 60000
    });
    
    console.log('Página carregada com sucesso');
    
    // Aguarda as seções de produtos ficarem disponíveis
    await page.waitForSelector('.homepage-section.collection-module', { timeout: 10000 });
    
    // Obtém produtos em destaque da página inicial
    const products = await page.evaluate(() => {
      const results = [];
      
      // Obtém todas as seções de produtos
      const productSections = document.querySelectorAll('.homepage-section.collection-module .unit-wrapper');
      
      productSections.forEach((section, index) => {
        try {
          // Obtém o nome do produto - pode estar em .headline ou .logo-image
          const headlineEl = section.querySelector('.headline') || section.querySelector('.logo-image');
          const headline = headlineEl ? headlineEl.textContent.trim() : 'Produto Desconhecido';
          
          // Obtém a descrição do produto
          const subheadEl = section.querySelector('.subhead');
          const subhead = subheadEl ? subheadEl.textContent.trim() : '';
          
          // Obtém o link do produto
          const linkEl = section.querySelector('.unit-link');
          const link = linkEl ? linkEl.getAttribute('href') : '';
          
          results.push({
            name: headline,
            description: subhead,
            link: link
          });
        } catch (err) {
          console.error(`Erro ao processar a seção ${index}: ${err.message}`);
        }
      });
      
      return results;
    });
    
    // Exibe os resultados
    console.log('Produtos da Apple encontrados:');
    console.log(JSON.stringify(products, null, 2));
    console.log(`Total de produtos encontrados: ${products.length}`);
    
  } catch (error) {
    console.error('Ocorreu um erro:', error);
  } finally {
    // Fecha o navegador
    await browser.close();
    console.log('Navegador fechado');
  }
})();

Você também pode entrar no Discord do Scrapeless para participar do programa de suporte ao desenvolvedor e receber até 500 mil créditos de uso da API SERP gratuitamente.

Análise técnica aprimorada

Detecção de bot: Como funciona

Os sistemas anti-bot usam várias técnicas para detectar automação:

  1. Impressão digital do navegador: Coleta dezenas de propriedades do navegador (fontes, canvas, WebGL, etc.) para criar uma assinatura única.

  2. Detecção de WebDriver: Procura a presença da API WebDriver ou seus artefatos.

  3. Análise comportamental: Analisa os movimentos do mouse, cliques, velocidade de digitação que diferem entre humanos e bots.

  4. Detecção de anomalia de navegação: Identifica padrões suspeitos, como solicitações muito rápidas ou falta de carregamento de imagem/CSS.

Leitura recomendada: Como contornar o anti-bot

Como o Undetected ChromeDriver contorna a detecção

O Undetected ChromeDriver contorna essas detecções por:

  1. Remover indicadores do WebDriver: Elimina a propriedade navigator.webdriver e outros rastros do WebDriver.

  2. Corrigir Cdc_: Modifica as variáveis do Controlador do Driver do Chrome que são assinaturas conhecidas do ChromeDriver.

  3. Usar User-Agents realistas: Substitui os User-Agents padrão por strings atualizadas.

  4. Minimizar as alterações de configuração: Reduz as alterações no comportamento padrão do navegador Chrome.

Código técnico mostrando como o Undetected ChromeDriver corrige o driver:

language Copy
Extrato simplificado do código-fonte do Undetected ChromeDriver

def _patch_driver_executable():
    """
    Corrige o binário do ChromeDriver para remover sinais reveladores de automação
    """
    linect = 0
    replacement = os.urandom(32).hex()
    with io.open(self.executable_path, "r+b") as fh:
        for line in iter(lambda: fh.readline(), b""):
            if b"cdc_" in line.lower():
                fh.seek(-len(line), 1)
                newline = re.sub(
                    b"cdc_.{22}", b"cdc_" + replacement.encode(), line
                )
                fh.write(newline)
                linect += 1
    return linect

Por que o Scrapeless é mais eficaz

O Scrapeless adota uma abordagem diferente por:

  1. Ambiente pré-configurado: Usando navegadores já otimizados para imitar usuários humanos.

  2. Infraestrutura baseada em nuvem: Executando navegadores na nuvem com impressão digital adequada.

  3. Rotação inteligente de proxy: Rotulando automaticamente os IPs com base no site de destino.

  4. Gerenciamento avançado de impressões digitais: Mantendo impressões digitais de navegador consistentes durante a sessão.

  5. Supressão de WebRTC, Canvas e Plugin: Bloqueando técnicas comuns de impressão digital.

Acesse o Scrapeless para uma avaliação gratuita.

Conclusão

Neste artigo, você aprendeu como lidar com a detecção de bots no Selenium usando o Undetected ChromeDriver. Esta biblioteca fornece uma versão corrigida do ChromeDriver para web scraping sem ser bloqueado.

O desafio é que tecnologias anti-bot avançadas como o Cloudflare ainda serão capazes de detectar e bloquear seus scripts. Bibliotecas como undetected_chromedriver são instáveis — embora possam funcionar hoje, podem não funcionar amanhã.

Para necessidades profissionais de scraping, soluções baseadas em nuvem como o Scrapeless oferecem uma alternativa mais robusta. Elas fornecem navegadores remotos pré-configurados, especificamente projetados para contornar medidas anti-bot, com recursos adicionais como rotação de IP e resolução de CAPTCHA.

A escolha entre Undetected ChromeDriver e Scrapeless depende de suas necessidades específicas:

  • Undetected ChromeDriver: Bom para projetos menores, gratuito e de código aberto, mas requer mais manutenção e pode ser menos confiável.
  • Scrapeless: Melhor para necessidades profissionais de scraping, mais confiável, constantemente atualizado, mas com um custo de assinatura.

Ao entender como essas tecnologias de desvio anti-bot funcionam, você pode escolher a ferramenta certa para seus projetos de web scraping e evitar as armadilhas comuns da coleta automatizada de dados.

Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.

Artigos mais populares

Catálogo