🎯 Um navegador em nuvem personalizável e anti-detecção alimentado por Chromium desenvolvido internamente, projetado para rastreadores web e agentes de IA. 👉Experimente agora
De volta ao blog

API de Desbloqueio da Web: Renderize Qualquer Página em HTML, Markdown ou PNG

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

08-Jul-2026

TL;DR:

  • O Web Unlocker transforma qualquer URL em dados limpos com um único POST. Envie uma URL para unlocker.webunlocker; receba a página como HTML, texto simples, Markdown, uma captura de tela ou conteúdo extraído — sem navegador para gerenciar.
  • Renderização em JavaScript é uma bandeira, não um produto separado. Defina jsRender.enabled: true e a página é renderizada em um navegador real antes da construção da resposta, então o conteúdo do lado do cliente já está disponível.
  • Você escolhe a forma da resposta. response.type é um dos valores html, plaintext, markdown, png, jpeg, network ou content — solicite Markdown para LLMs, PNG para uma captura de tela, content para extração estruturada.
  • O país do proxy é um campo. Defina proxy.country para direcionar a solicitação através de egressos residenciais naquela região; uma região incompatível é uma razão comum para que uma página seja renderizada de forma diferente.
  • Dois timeouts governam cada chamada. Um limite de 30 segundos para carregar a página e um limite global de 180 segundos para execução — o limite de carregamento da página tem prioridade.
  • Gratuito para começar. Novas contas Scrapeless incluem uso gratuito da API de Scraping Universal — inscreva-se em app.scrapeless.com.

Introdução: um ponto final, qualquer página, a forma que você pediu

A maior parte do código de raspagem gasta seu esforço em tudo ao redor dos dados: iniciar um navegador, esperar pelo JavaScript, lidar com o bloqueio e, em seguida, analisar HTML em algo utilizável. A API de Scraping Universal da Scrapeless colapsa isso em uma única solicitação HTTP. Você POST uma URL para o ator Web Unlocker, e a resposta é a página — já renderizada, já no formato que você pediu.

Este guia percorre o ator unlocker.webunlocker de ponta a ponta: a forma da solicitação, um primeiro curl, o envelope da resposta, uma integração em Python, os sete tipos de resposta que a renderização em JavaScript pode retornar e como manter as solicitações limpas. Cada solicitação e resposta abaixo foi capturada contra a API ao vivo.


O que você pode fazer com isso

  • Buscar uma página como HTML bruto — um GET simples através de um egress limpo, para quando você vai analisar a marcação por conta própria.
  • Renderizar páginas pesadas em JavaScript — defina jsRender.enabled e leia o conteúdo que só existe após a execução do cliente.
  • Obter Markdown para um LLM — solicite type: markdown e alimente o resultado diretamente em um pipeline RAG ou prompt.
  • Capturar uma captura de tela — solicite type: png ou jpeg e obtenha a área renderizada como uma imagem.
  • Extrair conteúdo estruturado — solicite type: content para puxar cabeçalhos, links, tabelas, e-mails, imagens e metadados da página.
  • Assistir às respostas da rede — solicite type: network para capturar as respostas XHR/fetch que uma página faz, filtradas por URL, status e método.
  • Dirija a página primeiro — execute instructions (aguardar um seletor, clicar, preencher, pressionar teclas) antes que a resposta seja construída.

Por que a API de Scraping Universal da Scrapeless

A API de Scraping Universal é a superfície gerenciada de desbloqueio da web: você envia uma URL, ela lida com renderização, egressos e anti-detecção, e retorna dados limpos. Para este fluxo de trabalho especificamente, ela traz:

  • Renderização em JavaScript do lado da nuvem — um navegador real executa a página, então aplicativos de página única e conteúdo carregado lentamente são resolvidos antes que a resposta seja construída.
  • Proxies residenciais em mais de 195 países — direcione através de proxy.country para que a reputação do IP de saída seja limpa e páginas geograficamente roteadas sirvam corretamente.
  • Manejo automático de desafios — reCAPTCHA v2, Cloudflare Turnstile e o intersticial do Cloudflare são tratados dentro do ator.
  • Sete formatos de resposta — HTML, texto simples, Markdown, PNG, JPEG, captura da rede e conteúdo estruturado do mesmo ponto final.
  • Um único contrato HTTP — sem ciclo de vida do navegador, sem versões de driver; a resposta é os dados.

Obtenha sua chave API no plano gratuito em app.scrapeless.com.


Pré-requisitos

  • Uma conta Scrapeless e chave API — inscreva-se em app.scrapeless.com
  • curl para a primeira solicitação e Python 3.10+ (ou Node.js 18+) para a integração
  • Familiaridade básica com HTTP e JSON

Como o Web Unlocker funciona

Cada chamada é um POST para um ponto final com um corpo JSON de {ator, entrada, proxy}.

Parâmetros de solicitação

Campo Onde Significado
ator nível superior unlocker.webunlocker
input.url entrada a página a ser buscada
input.method entrada método HTTP (padrão GET)
input.redirect entrada seguir redirecionamentos (true/false)
input.jsRender entrada { enabled, response, instructions, block } — opções de renderização
proxy.country proxy código ISO do país ou ANY

A autenticação é o cabeçalho x-api-token. O envelope da resposta é sempre { "code": 200, "data": ... }.

Captura rápida com curl

Busque uma página como HTML através de um egress residencial:

bash Copy
curl -X POST https://api.scrapeless.com/api/v2/unlocker/request \
  -H "x-api-token: ${SCRAPELESS_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
```json
{
  "ator": "unlocker.webunlocker",
  "entrada": { "url": "https://www.example.com", "metodo": "GET", "redirigir": false },
  "proxy": { "pais": "QUALQUER" }
}

Envelope de resposta

json Copy
{
  "codigo": 200,
  "dados": "<!doctype html><html>…</html>"
}

Um codigo de 200 significa que a solicitação foi bem-sucedida; dados contém a carga útil — texto HTML aqui, Markdown ou uma imagem base64 para outros tipos de resposta.


Integrando a API em Python

A mesma chamada do Python, lendo a chave do ambiente:

python Copy
import os
import requests

CHAVE_API = os.environ["SCRAPELESS_API_KEY"]

resp = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    headers={"x-api-token": CHAVE_API, "Content-Type": "application/json"},
    json={
        "ator": "unlocker.webunlocker",
        "entrada": {"url": "https://www.example.com", "metodo": "GET", "redirigir": False},
        "proxy": {"pais": "QUALQUER"},
    },
    timeout=70,
)

dados = resp.json()
if dados.get("codigo") == 200:
    html = dados["dados"]
    print(len(html), "bytes de HTML")

Obtenha sua chave API no plano gratuito: app.scrapeless.com


Renderizando JavaScript: os sete tipos de resposta

Para renderizar a página em um navegador real primeiro, adicione jsRender. O response.type decide o que volta. Solicite Markdown para uma página — ideal para alimentar um LLM:

python Copy
payload = {
    "ator": "unlocker.webunlocker",
    "proxy": {"pais": "QUALQUER"},
    "entrada": {
        "url": "https://www.example.com",
        "jsRender": {
            "ativado": True,
            "resposta": {"tipo": "markdown"},
        },
    },
}
resp = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    json=payload,
    headers={"x-api-token": CHAVE_API, "Content-Type": "application/json"},
    timeout=70,
)
print(resp.json()["dados"])
# "# Domínio de Exemplo\n\nEste domínio é para uso em exemplos de documentação..."

O campo tipo seleciona o formato:

response.type Retorna
html HTML renderizado após a execução do JavaScript
plaintext texto visível, marcação removida
markdown a página como Markdown (pronto para LLM)
png / jpeg uma captura de tela como uma string base64
network respostas XHR/fetch capturadas, filtradas por urls, status, methods
content extração estruturada — títulos, links, tabelas, imagens, e-mails, metadados

Para uma captura de tela, solicite png e decodifique os dados base64 em bytes:

python Copy
import base64

payload["entrada"]["jsRender"]["resposta"] = {"tipo": "png"}
resp = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    json=payload,
    headers={"x-api-token": CHAVE_API, "Content-Type": "application/json"},
    timeout=70,
)
with open("pagina.png", "wb") as f:
    f.write(base64.b64decode(resp.json()["dados"]))

Dirigindo a página antes da captura

Quando o conteúdo aparece apenas após a interação, passe instruções — cada uma é um verbo que o renderizador executa em ordem antes de construir a resposta:

json Copy
{
  "ator": "unlocker.webunlocker",
  "entrada": {
    "url": "https://example.com",
    "jsRender": {
      "ativado": true,
      "instruções": [
        { "esperarPor": [".conteudo-dinamico", 30000] },
        { "clicar": ["#carregar-mais", 1000] },
        { "preencher": ["#entrada-busca", "termo de busca"] },
        { "teclado": ["pressionar", "Enter"] },
        { "avaliar": "window.scrollTo(0, document.body.scrollHeight)" }
      ]
    }
  }
}

Você também pode reduzir a largura de banda bloqueando tipos de recursos que você não precisa com jsRender.block.resources (por exemplo, Imagem, Fonte, Mídia, Folha de Estilo), que a camada de busca ignora de acordo com as categorias de recursos definidas na Fetch API.


Como evitar problemas comuns

  • Um campo que não está na página é nulo, não é um erro. Trate cada campo extraído como opcional e guarde sua ausência em vez de presumir que está presente.
  • Cuidado com os dois limites de tempo. Um teto de carregamento de página de 30 segundos e um teto de execução global de 180 segundos limitam cada chamada, e o limite de carregamento da página tem prioridade — mantenha os valores de esperarPor dentro desse orçamento. A especificação de semântica HTTP define os códigos de status que você verá se um alvo em si resultar em erro.
  • Fixe o país ao conteúdo. Se uma página geo-ruta, defina proxy.pais para a região que serve a versão que você deseja; QUALQUER está bem quando não há necessidade.
  • Escolha o tipo de resposta deliberadamente. Solicite markdown ou content quando você quiser dados, não html que você terá que analisar — a extração acontece no lado do servidor de qualquer maneira, e os padrões de tráfego automatizado que o desbloqueador manipula estão catalogados em o projeto de Ameaças Automáticas OWASP.

Conclusão: a página, na forma que você precisa

O Web Unlocker reduz uma raspagem a uma decisão: qual URL e qual tipo de resposta. Renderização, saída e anti-detecção são tratados dentro do ator, assim uma página rica em JavaScript se torna Markdown limpo ou uma captura de tela em uma única solicitação. Combine-o com o Scraping Browser quando você precisar de uma sessão interativa completa, e leia sobre saída residencial versus datacenter uma vez que a reputação do proxy decide a maioria dos resultados de renderização. A documentação da API Universal de Raspagem cobre todos os campos.


Pronto para Construir Seu Pipeline de Dados Movido a IA?

Junte-se à nossa comunidade para reivindicar um plano gratuito e se conectar com desenvolvedores que constroem pipelines de extração: Discord · Telegram.

Inscreva-se em app.scrapeless.com para uso gratuito da API Universal de Raspagem, e veja preços para escala.


FAQ

Q: Qual é a diferença entre o Web Unlocker e o Scraping Browser?
O Web Unlocker é um endpoint de solicitação/resposta único — envie uma URL, receba a página de volta com uma chamada. O Scraping Browser é um navegador em nuvem interativo completo que você controla com Puppeteer ou Playwright. Use o desbloqueador para buscar e analisar; use o navegador para sessões em múltiplas etapas.

Q: Preciso habilitar a renderização JavaScript?
Somente quando o conteúdo que você precisa é renderizado no cliente. Um simples GET retorna o HTML do servidor; adicionar jsRender.enabled: true executa a página em um navegador real primeiro, que é o que você deseja para aplicativos de página única e conteúdo carregado sob demanda.

Q: Qual tipo de resposta devo usar para um pipeline LLM?
markdown — ele retorna a página como Markdown limpo com a marcação removida, que é o que a maioria dos pipelines RAG e de prompt deseja. Use content quando você precisar de campos discretos (títulos, links, tabelas) em vez de prosa.

Q: Como faço para obter uma captura de tela?
Defina response.type como png ou jpeg; o campo data retorna como uma string base64 que você decodifica para bytes de imagem.

Q: Preciso de um proxy?
A saída está integrada. Defina proxy.country para rotear através de IPs residenciais em uma região específica, ou ANY para deixar o serviço escolher. Definir um país é importante quando uma página utiliza roteamento geográfico ou desafia IPs de datacenter.

Q: Quais são os limites de tempo?
Um teto fixo de 30 segundos para carregamento de página e um teto global de execução de 180 segundos. O limite de carregamento de página tem prioridade e pode encerrar a chamada antes do limite global, então mantenha quaisquer valores waitFor dentro desse orçamento.

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