Scraper Webmotors com Selenium: tutorial prático, limites reais e a melhor alternativa

13 de março de 2026 · 13 min · Equipe GeckoAPI
Scraper Webmotors com Selenium: tutorial prático, limites reais e a melhor alternativa

Quer testar? Acesse o dashboard e ganhe 100 créditos grátis para começar.

Ir para o Dashboard

Se você está pesquisando por scraper Webmotors, Webmotors Selenium, web scraping Webmotors ou algo como “como extrair dados da Webmotors com Python”, provavelmente já chegou à mesma conclusão que muita gente em dados, growth, automação comercial e inteligência automotiva: a Webmotors concentra um volume enorme de anúncios, preços, versões, quilometragem e dados de lojistas que parecem perfeitos para alimentar dashboards, CRMs, motores de precificação e agentes de IA.

No papel, a ideia é simples. Você abre a página, coleta título, preço, cidade, ano, versão, quilometragem e segue a vida.

Na prática, construir um crawler Webmotors confiável é bem mais difícil do que parece.

Neste tutorial em português BR, vamos percorrer o caminho completo:

  1. Como montar um scraper Webmotors com Selenium.
  2. Quais bibliotecas complementares usar além do Selenium.
  3. Onde esse tipo de projeto costuma quebrar em produção.
  4. Por que é muito provável que seu scraper seja bloqueado ou degradado ao escalar.
  5. Por que, na maioria dos casos, faz mais sentido delegar isso para a API da GeckoAPI para Webmotors em vez de construir tudo in-house.

Por que tanta gente quer fazer um scraper da Webmotors?

A Webmotors é uma fonte estratégica para vários casos de uso:

  • Monitoramento de preços de veículos por região.
  • Comparação com FIPE e identificação de oportunidades.
  • Enriquecimento de leads para lojas e revendas.
  • Análise de estoque da concorrência.
  • Treinamento de modelos de IA para recomendação e valuation.
  • Alertas automáticos de anúncios interessantes.

Se o seu objetivo é montar uma rotina que acompanhe SUVs em Curitiba, picapes em Goiânia ou seminovos premium em São Paulo, um scraper Webmotors com Python parece um bom ponto de partida.

Stack recomendada para um scraper Webmotors com Selenium

Se você realmente quiser começar do zero, a stack mais comum é:

  • selenium para abrir o navegador e interagir com a página.
  • webdriver-manager para gerenciar o driver.
  • beautifulsoup4 para parsing de HTML.
  • pandas para estruturar os dados.
  • tenacity ou retry manual para reprocessamento.
  • httpx ou requests para chamadas auxiliares.

Instalação:

pip install selenium webdriver-manager beautifulsoup4 pandas tenacity httpx

Isso te dá o básico para iniciar um tutorial de scraping Webmotors com Selenium, mas não resolve os problemas mais difíceis: bloqueio, anti-bot, mudanças de DOM e confiabilidade em escala.

Tutorial: como fazer um scraper Webmotors com Selenium

Vamos começar pelo caminho mais intuitivo: abrir a página da busca, esperar os cards carregarem e extrair os itens visíveis.

1. Subindo o navegador

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager


def build_driver():
    options = Options()
    options.add_argument("--headless=new")
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_argument("--window-size=1440,2200")
    options.add_argument(
        "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
        "AppleWebKit/537.36 (KHTML, like Gecko) "
        "Chrome/123.0.0.0 Safari/537.36"
    )

    service = Service(ChromeDriverManager().install())
    return webdriver.Chrome(service=service, options=options)

Isso já mostra a primeira camada de complexidade: só para o Selenium parecer minimamente humano, você começa a ajustar user-agent, flags do Chrome e tamanho de janela.

2. Acessando uma página de busca da Webmotors

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = build_driver()
url = "https://www.webmotors.com.br/carros/estoque?marca1=VOLVO"

driver.get(url)

WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.TAG_NAME, "body"))
)

html = driver.page_source
print(html[:1000])

Aqui muita gente sente que “deu certo”. A página abriu, o HTML existe, o navegador não explodiu.

Só que abrir uma página uma vez não é o mesmo que manter um scraper da Webmotors em produção.

3. Parseando os dados com BeautifulSoup

from bs4 import BeautifulSoup


soup = BeautifulSoup(html, "html.parser")

cards = soup.select("a")
items = []

for card in cards:
    href = card.get("href")
    text = " ".join(card.stripped_strings)

    if href and "/comprar/" in href:
        items.append(
            {
                "url": href,
                "raw_text": text[:500],
            }
        )

print(items[:5])

Esse exemplo é propositalmente simples porque ele revela uma verdade importante: no começo, você ainda está descobrindo quais seletores são confiáveis. E sites como a Webmotors podem alterar classes, componentes e hierarquia do DOM sem qualquer aviso.

4. Estruturando o scraper de detalhe do anúncio

Depois da busca, o fluxo natural é abrir cada PDP e extrair os atributos completos do veículo:

from bs4 import BeautifulSoup


def parse_vehicle_page(html: str) -> dict:
    soup = BeautifulSoup(html, "html.parser")
    title = soup.find("h1")

    return {
        "name": title.get_text(strip=True) if title else None,
        "html_length": len(html),
    }

Na teoria, você vai expandindo isso para capturar:

  • nome do veículo
  • preço
  • versão
  • quilometragem
  • combustível
  • câmbio
  • localização
  • vendedor
  • fotos
  • comparativos de preço

Na prática, você descobre rapidamente que o maior trabalho não é “extrair”, e sim garantir que o conteúdo recebido é o conteúdo certo.

Outras abordagens além do Selenium

Quando o Selenium começa a ficar caro ou lento, normalmente surgem três tentativas adicionais.

Requests + BeautifulSoup

Você tenta eliminar o browser e baixar o HTML diretamente:

import httpx


headers = {
    "User-Agent": (
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
        "AppleWebKit/537.36 (KHTML, like Gecko) "
        "Chrome/123.0.0.0 Safari/537.36"
    )
}

resp = httpx.get(
    "https://www.webmotors.com.br/carros/estoque?marca1=VOLVO",
    headers=headers,
    timeout=30.0,
)

print(resp.status_code)
print(resp.text[:500])

Isso pode ser muito mais leve que Selenium. O problema é que essa abordagem tende a ser mais detectável, especialmente quando o site observa fingerprint de cliente HTTP, padrão de IP e taxa de requisição.

Playwright ou Puppeteer

Você troca Selenium por outra automação de navegador. Às vezes melhora a ergonomia, mas o problema central continua:

  • navegador consome muita RAM
  • renderização é lenta
  • paralelismo fica caro
  • fingerprints continuam sendo analisadas
  • a operação vira um projeto de infra

APIs internas e endpoints não documentados

Muita gente tenta farejar chamadas XHR no DevTools para buscar JSON direto.

Isso até pode funcionar temporariamente, mas costuma ser o tipo de solução mais frágil de todas:

  • endpoints internos podem mudar
  • parâmetros podem ser assinados
  • payloads podem variar por sessão
  • proteção anti-bot pode existir mesmo em endpoints JSON

Em resumo: “outros jeitos” existem, mas quase todos só trocam um tipo de fragilidade por outro.

O que acontece quando você tenta escalar o scraper Webmotors

O tutorial acima funciona como prova de conceito. O problema começa quando você precisa transformar a prova de conceito em um pipeline confiável.

É aí que entram as muralhas reais do web scraping moderno.

1. Bloqueio de IP e reputação de rede

Se você roda seu scraper numa VPS, numa instância cloud ou num range conhecido de data center, a chance de sofrer restrição aumenta bastante. O comportamento pode variar:

  • páginas degradadas
  • redirecionamentos
  • latência artificial
  • respostas incompletas
  • bloqueio temporário

Ou seja: o mesmo código que parecia estável na sua máquina local começa a falhar em produção.

2. Fingerprinting do navegador e do cliente

Hoje não basta colocar um User-Agent bonito. Sistemas anti-bot cruzam vários sinais:

  • fingerprint TLS
  • WebDriver detection
  • ordem de headers
  • canvas fingerprint
  • timezone e locale
  • padrão de navegação
  • velocidade e cadência de requests

É por isso que um scraper Webmotors com Selenium pode funcionar num lote pequeno e parar de funcionar quando você sobe volume.

3. Rate limiting silencioso

Esse é um dos piores cenários porque nem sempre aparece como erro explícito.

Você pode receber:

  • status 200 com conteúdo parcial
  • resposta diferente da esperada
  • página de desafio
  • conteúdo que não contém os cards que seu parser espera

Se você não valida o resultado de forma rigorosa, seu pipeline continua rodando e salvando dados ruins.

4. Mudanças frequentes no HTML

Mesmo quando não há bloqueio, o front-end muda.

Isso quebra:

  • seletores CSS
  • XPath
  • ordem de elementos
  • nomes de classes
  • fallback do parser

O custo real de um scraper in-house quase nunca está no dia em que ele nasce. Está nos meses seguintes, quando alguém precisa ficar corrigindo o coletor sempre que o site muda.

5. Headless browser não escala bem

Selenium, Playwright e Puppeteer têm um custo operacional pesado:

  • consumo alto de memória por sessão
  • CPU maior por página
  • tempo de carregamento mais alto
  • concorrência limitada
  • necessidade de orquestração, retries, filas e monitoramento

Se você quer extrair centenas ou milhares de anúncios por dia, o gargalo deixa de ser o parser e passa a ser a infraestrutura inteira.

Sinais de que seu scraper da Webmotors provavelmente será bloqueado

Se você está tentando fazer isso internamente, estes são sinais comuns de que o bloqueio já começou:

  • o HTML vem menor do que o normal
  • os seletores pararam de bater do nada
  • alguns IPs funcionam e outros não
  • a taxa de sucesso cai conforme o volume sobe
  • rodando com browser visível funciona melhor que headless
  • os dados vêm inconsistentes entre execuções

Quando esses sintomas aparecem, o time geralmente entra num ciclo ruim:

  1. ajusta header
  2. troca proxy
  3. muda delay
  4. altera seletor
  5. sobe de novo
  6. quebra de novo

Esse ciclo é extremamente comum em qualquer projeto de web scraping Webmotors levado para produção.

O custo escondido de fazer scraping da Webmotors in-house

Quando alguém diz “vamos fazer nosso próprio scraper”, a conta geralmente é subestimada.

Na prática, você precisa considerar:

  • tempo de desenvolvimento inicial
  • manutenção de parser
  • rotação de IP/proxy
  • observabilidade e alertas
  • retries e fila de execução
  • custo de browser automation
  • monitoramento de regressão
  • tempo do time corrigindo quebras

Uma iniciativa que parecia “só um script em Python” vira rapidamente uma mini-plataforma de coleta.

Quando faz sentido não construir isso do zero

Se o seu core business é:

  • comprar e vender carros
  • monitorar concorrência
  • gerar inteligência de preços
  • enriquecer leads
  • alimentar dashboards
  • abastecer agentes de IA

Então provavelmente o seu problema não é construir um scraper. O seu problema é ter dados confiáveis da Webmotors.

Essas são coisas bem diferentes.

Entender como fazer o scraper é útil. Manter esse scraper vivo em escala é outra história.

A alternativa melhor: delegar a extração para a API da GeckoAPI

Se o seu objetivo final é extrair dados da Webmotors com estabilidade, o caminho mais racional costuma ser usar uma API que já encapsula toda essa complexidade.

Com a GeckoAPI Webmotors API, você consulta busca (PLP) e detalhe (PDP) com payloads simples e recebe JSON estruturado.

Exemplo: busca de veículos na Webmotors

curl -X POST \
  -H "Authorization: Bearer SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "webmotors.com.br",
    "type": "plp",
    "city": "Sao Jose dos Pinhais",
    "state": "PR",
    "usedCars": true,
    "newCars": false,
    "page": 1
  }' \
  https://api.geckoapi.com.br/v1/extract

Com isso, você consegue buscar anúncios e receber campos como:

  • URL do anúncio
  • SKU
  • nome do veículo
  • preço
  • ano fabricação/modelo
  • quilometragem
  • câmbio
  • combustível
  • cidade/estado do vendedor

Exemplo: detalhe do anúncio (PDP)

curl -X POST \
  -H "Authorization: Bearer SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "webmotors.com.br",
    "type": "pdp",
    "url": "https://www.webmotors.com.br/comprar/chevrolet/tracker/1-2-turbo-flex-premier-automatico/4-portas/2024/65274301"
  }' \
  https://api.geckoapi.com.br/v1/extract

No detalhe, você pode enriquecer o dado com atributos como:

  • versão completa
  • localização do veículo
  • seller name e seller type
  • priceComparison
  • badges do anúncio
  • itens de inspeção
  • fotos
  • características técnicas

O que você deixa de manter in-house

Ao delegar para uma API especializada, você deixa de operar:

  • browser automation
  • rotação de proxies
  • camadas anti-bot
  • parsing frágil de HTML
  • monitoramento de quebra por mudança visual
  • fila de retries para páginas que falharam

Na prática, você troca um problema de scraping por uma integração HTTP bem direta.

Scraper Webmotors vs GeckoAPI: comparação objetiva

CritérioScraper interno com SeleniumAPI da GeckoAPI
Tempo até primeiro resultadoHoras ou diasMinutos
EscalabilidadeDifícilMuito mais simples
Risco de bloqueioAltoExternalizado
Custo de manutençãoContínuoBaixo
Qualidade do dadoVariávelEstruturada
Complexidade operacionalAltaBaixa
Dependência de HTML/DOMTotalNão no seu lado

Conclusão: é totalmente possível fazer, mas muito provável que bloqueie

Sim, você consegue montar um scraper Webmotors com Selenium. Como tutorial, aprendizado técnico e prova de conceito, isso faz sentido. Você aprende sobre automação de navegador, parsing, retries, concorrência e observabilidade.

Mas, para uso real de negócio, a conclusão honesta é esta: é muito provável que o scraper seja bloqueado, degradado ou fique caro demais para manter.

E esse ponto importa muito.

Porque, se o objetivo da sua empresa é ter dados confiáveis da Webmotors, construir esse pipeline internamente quase sempre significa gastar tempo e dinheiro resolvendo um problema que já poderia vir resolvido.

Em vez de investir semanas ou meses tentando estabilizar um crawler próprio, a alternativa melhor costuma ser delegar para a GeckoAPI Webmotors API e focar no que realmente gera valor:

  • análise
  • produto
  • inteligência de preços
  • operação comercial
  • automação com IA

Se você quer entender o lado técnico, vale a pena construir o scraper.

Se você quer resultado de negócio, estabilidade e velocidade, vale mais a pena integrar a API.


Quer ir direto ao ponto? Veja também:

Teste a GeckoAPI agora: dashboard.geckoapi.com.br.

Quer testar?

Acesse o dashboard e ganhe 100 créditos grátis para começar. Sem cartão de crédito.

Criar conta grátis
WhatsApp