GLM-5.3 Web Scraping: Construir um pipeline de extração confiável com gerenciamento de CAPTCHA

Adélia Cruz
How to use CapSolver
29-Sep-2026
TL;DR
- Use GLM-5.3 após o acesso e renderização, não como substituto da camada do navegador. O modelo deve receber texto de página permitido, capturas de tela ou registros normalizados apenas após a aplicação ter classificado a resposta.
- Separe o acesso, tratamento de desafios, extração e validação. Isso permite distinguir um resultado vazio de uma página de login, limite de taxa, shell JavaScript ou checkpoint de CAPTCHA.
- Use o CapSolver apenas para tarefas de verificação suportadas em fluxos autorizados. Mantenha o sessão do navegador, URL do site, parâmetros da tarefa, orçamento de tentativas e validação final sob controle da aplicação.
- Exija saída estruturada do GLM-5.3 e a valide no código. Uma resposta JSON sintaticamente válida ainda pode conter valores ausentes, duplicados ou não suportados.
- Armazene evidências com cada registro. URL de origem, horário de extração, hash de conteúdo e status de validação tornam os fluxos de trabalho de IA e dados mais fáceis de auditar.
Introdução: Onde o GLM-5.3 se encaixa em uma pipeline de raspagem de web
Modelos de linguagem grandes podem transformar conteúdo web inconsistente em registros úteis, mas não eliminam o trabalho operacional necessário para obter dados de página confiáveis. Uma pipeline de produção ainda precisa de verificações de permissão, limites de solicitação, execução do navegador quando o JavaScript for necessário, tratamento explícito para checkpoints de verificação e validação determinística antes que um registro chegue a um banco de dados.
GLM-5.3 é útil na camada de interpretação. Seu fluxo de trabalho compatível com API pode classificar conteúdo renderizado, mapear texto para um esquema, explicar por que um campo está ausente e ajudar a normalizar diferenças entre páginas. Para automação autorizada que encontre uma tarefa de verificação suportada, CapSolver pode ser colocado antes da extração enquanto a aplicação mantém o controle da sessão da página e verifica o resultado final.
Este guia apresenta uma arquitetura genérica, não instruções para um site específico. Use-o apenas para dados públicos ou de outra forma autorizados e pare quando um fluxo atingir limites de login, pagamento, dados pessoais ou permissões fora do escopo aprovado.
A arquitetura confiável: acesso primeiro, modelo depois
Um sistema robusto de raspagem de web com GLM-5.3 usa uma sequência de estágios pequenos. Cada estágio produz um resultado tipado que o próximo estágio pode verificar.
| Estágio | Responsabilidade | Saída esperada | Condição de parada |
|---|---|---|---|
| Porta de permissão | Verificar destino, escopo de dados, taxa e propósito | Definição de trabalho aprovada | Escopo não autorizado |
| Camada de acesso | Buscar ou renderizar a página | Status, cabeçalhos, URL final, HTML ou captura de tela | Login, pagamento, dados privados ou acesso negado |
| Classificador de resposta | Identificar conteúdo, página vazia, limite de taxa ou página de verificação | Estado da página nomeado | Estado desconhecido ou não suportado |
| Adaptador de verificação | Submeter uma tarefa documentada quando permitido | Pronto, processando ou erro terminal | Prazo ou orçamento de tentativas atingido |
| Extração do GLM | Converter conteúdo permitido em um esquema estrito | Registro JSON candidato | Saída inválida ou não suportada por evidência |
| Validação determinística | Verificar tipos, campos obrigatórios, duplicatas e evidência de origem | Registro aceito ou rejeição explícita | Qualquer regra de negócio falhar |
| Armazenamento | Realizar gravação idempotente | ID de registro estável e link de rastreamento | Chave de origem já existe sem nova versão |
A fronteira mais importante é entre acesso e interpretação. Se um modelo receber o HTML de uma página de desafio, ele pode descrever confiantemente essa página como o conteúdo alvo. Classifique a resposta antes de acionar o modelo.
Pré-requisitos
O exemplo de orquestração usa Python 3.11 ou superior e o pacote requests. Mantenha credenciais em variáveis de ambiente e nunca as inclua em código-fonte, prompts, logs, capturas de tela ou configuração comprometida.
bash
python -m venv .venv
source .venv/bin/activate
pip install requests
export ZAI_API_KEY="replace-with-your-z-ai-key"
export CAPSOLVER_API_KEY="replace-with-your-capsolver-key"
A documentação oficial da API Z.ai usa o ponto final chat-completions em https://api.z.ai/api/paas/v4/chat/completions. Confirme o identificador do modelo atual no repositório GLM-5 ou no seu console Z.ai antes da implantação; este guia usa glm-5.3-flash como padrão configurável por ambiente.
Etapa 1: Defina um contrato de extração estrito
Não peça ao modelo para "extrair tudo importante". Defina os campos, comportamento permitido de nulos e requisitos de evidência antes de coletar uma página.
python
from dataclasses import dataclass
from datetime import datetime, timezone
from typing import Any
@dataclass(frozen=True)
class ExtractionJob:
source_url: str
allowed_host: str
required_fields: tuple[str, ...]
max_input_chars: int = 40_000
def validate_record(job: ExtractionJob, record: dict[str, Any]) -> dict[str, Any]:
missing = [name for name in job.required_fields if not record.get(name)]
if missing:
raise ValueError(f"missing_required_fields:{','.join(missing)}")
if record.get("source_url") != job.source_url:
raise ValueError("source_url_mismatch")
record["validated_at"] = datetime.now(timezone.utc).isoformat()
return record
O modelo só pode retornar null quando o esquema permitir explicitamente. Valores obrigatórios devem ser confirmados contra evidência da página por código comum.
Etapa 2: Classifique a página antes de enviá-la para o GLM-5.3
A camada de acesso deve retornar um pequeno objeto de estado em vez de apenas uma string de HTML. O classificador pode usar códigos de status, URL final, tipo de conteúdo, seletores esperados e marcadores conhecidos de checkpoint.
python
from enum import Enum
class PageState(str, Enum):
CONTENT = "content"
JAVASCRIPT_REQUIRED = "javascript_required"
RATE_LIMITED = "rate_limited"
LOGIN_REQUIRED = "login_required"
VERIFICATION = "verification"
UNKNOWN = "unknown"
def choose_action(state: PageState) -> str:
return {
PageState.CONTENT: "extract",
PageState.JAVASCRIPT_REQUIRED: "render_in_authorized_browser",
PageState.RATE_LIMITED: "back_off",
PageState.LOGIN_REQUIRED: "stop_for_operator",
PageState.VERIFICATION: "evaluate_supported_task",
PageState.UNKNOWN: "stop_for_review",
}[state]
HTTP 403 e HTTP 429 não devem entrar em um loop de tentativa genérico. Uma solicitação recusada requer revisão de permissão e configuração. Uma solicitação limitada de taxa requer redução da concorrência global e respeito a qualquer janela de tentativa fornecida pelo servidor.
Etapa 3: Mantenha o tratamento de verificação limitado
A API oficial do CapSolver usa createTask para submeter uma tarefa documentada. Tarefas assíncronas são verificadas com getTaskResult. A aplicação deve selecionar o tipo de tarefa do documento atual task documentation e passar apenas os campos necessários para esse checkpoint autorizado.
python
import os
import time
import requests
CAPSOLVER_BASE = "https://api.capsolver.com"
def solve_supported_task(task: dict, *, timeout_seconds: int = 45) -> dict:
api_key = os.environ["CAPSOLVER_API_KEY"]
created = requests.post(
f"{CAPSOLVER_BASE}/createTask",
json={"clientKey": api_key, "task": task},
timeout=15,
).json()
if created.get("errorId") != 0:
raise RuntimeError(created.get("errorCode", "create_task_failed"))
if created.get("status") == "ready":
return created["solution"]
task_id = created.get("taskId")
if not task_id:
raise RuntimeError("missing_task_id")
deadline = time.monotonic() + timeout_seconds
while time.monotonic() < deadline:
time.sleep(3)
result = requests.post(
f"{CAPSOLVER_BASE}/getTaskResult",
json={"clientKey": api_key, "taskId": task_id},
timeout=15,
).json()
if result.get("errorId") != 0:
raise RuntimeError(result.get("errorCode", "task_failed"))
if result.get("status") == "ready":
return result["solution"]
if result.get("status") not in {"idle", "processing"}:
raise RuntimeError("unexpected_task_status")
raise TimeoutError("verification_task_deadline_exceeded")
O chamador deve permitir apenas uma tentativa limitada por padrão. A solução retornada deve ser aplicada por meio do caminho de integração documentado no mesmo contexto de navegador que detectou o checkpoint. Se a página não transitar para o estado esperado, retorne uma falha ou solicite revisão humana.
Resgate seu código de bônus do CapSolver
Aumente seu orçamento de automação instantaneamente!
Use o código de bônus CAP26 ao recarregar sua conta do CapSolver para obter um bônus adicional de 5% em cada recarga — sem limites.
Resgate-o agora em seu Painel do CapSolver
Etapa 4: Envie conteúdo normalizado para o GLM-5.3
Após confirmar que a página é conteúdo, remova ruídos de navegação, scripts, elementos ocultos, banners repetidos e chrome de página irrelevante. Preserve títulos, rótulos, tabelas e referências de origem. Não envie cookies do navegador, cabeçalhos de autorização, dados pessoais ou rastros de sessão brutos para o modelo.
python
import json
import os
import requests
ZAI_ENDPOINT = "https://api.z.ai/api/paas/v4/chat/completions"
def extract_with_glm(job: ExtractionJob, normalized_text: str) -> dict:
prompt = {
"source_url": job.source_url,
"required_fields": list(job.required_fields),
"rules": [
"Retorne um objeto JSON e nenhuma prosa.",
"Use apenas evidência presente em page_text.",
"Não infira um valor obrigatório ausente.",
"Inclua source_url exatamente como fornecido.",
],
"page_text": normalized_text[: job.max_input_chars],
}
response = requests.post(
ZAI_ENDPOINT,
headers={
"Authorization": f"Bearer {os.environ['ZAI_API_KEY']}",
"Content-Type": "application/json",
},
json={
"model": os.getenv("GLM_MODEL", "glm-5.3-flash"),
"messages": [
{"role": "system", "content": "Extraia dados estruturados com base em evidências."},
{"role": "user", "content": json.dumps(prompt, ensure_ascii=False)},
],
"temperature": 0,
},
timeout=60,
)
response.raise_for_status()
content = response.json()["choices"][0]["message"]["content"]
return json.loads(content)
Trate o exemplo como uma fronteira de adaptador. Confirme as opções de solicitação e recursos de saída estruturada na documentação oficial da Z.ai antes do uso em produção. Se o modelo envolver JSON em Markdown ou retornar texto fora do contrato, rejeite a resposta em vez de tentar repará-la silenciosamente.
Etapa 5: Valide o resultado do navegador e o registro extraído
Duas validações diferentes são necessárias.
Primeiro, valide o resultado do navegador. Confirme que a URL final, o título esperado, o contêiner de destino e a ausência de um novo erro correspondam ao fluxo pretendido. Uma resposta de tarefa bem-sucedida não é prova de que a página tenha continuado.
Segundo, valide o registro extraído. Verifique strings obrigatórias, intervalos numéricos, datas, URLs normalizadas, chaves duplicadas e trechos de evidência. Para campos de alto impacto, compare o valor com um seletor determinístico ou uma segunda representação independente da página.
python
def run_extraction(job: ExtractionJob, state: PageState, page_text: str) -> dict:
action = choose_action(state)
if action != "extract":
raise RuntimeError(f"page_not_ready_for_model:{action}")
candidate = extract_with_glm(job, page_text)
return validate_record(job, candidate)
Essa última etapa previne que uma página de desafio, alucinação do modelo ou renderização parcial entre no conjunto de dados como raspagem bem-sucedida.
Observabilidade e controles de custo
Registre um ID de rastreamento, URL de origem, URL final, estado da página, hash de conteúdo, nome do modelo, versão do prompt, versão do esquema, resultado da validação e tempo de processamento. Armazene IDs de tarefa e códigos de erro para depuração operacional de curto prazo, mas não armazene tokens de solução, segredos ou dados de sessão irrelevantes.
Aplicar um orçamento em toda a tarefa. Contar tentativas HTTP, navegações do navegador, tentativas de verificação, chamadas do GLM, caracteres de entrada e tempo decorrido. Quando o orçamento for esgotado, retorne uma falha tipada em vez de permitir que um componente reinicie o fluxo.
Um conjunto útil de métricas inclui:
- percentual de páginas classificadas como conteúdo real antes do uso do modelo;
- taxa de passagem da validação de esquema;
- taxa de registros duplicados e vazios;
- custo do navegador e modelo por registro aceito;
- número de revisões humanas por motivo de parada;
- sucesso total confirmado pela evidência da página final.
Modos comuns de falha
| Sintoma | Causa provável | Ação correta |
|---|---|---|
| GLM retorna detalhes sobre uma página de verificação | A resposta não foi classificada antes do prompt | Pare a chamada do modelo e corrija a detecção do estado da página |
| JSON é analisado, mas os campos obrigatórios estão vazios | Prompt ou evidência da fonte é incompleta | Rejeite o registro e inspecione o conteúdo normalizado |
| Tarefa está pronta, mas a página permanece bloqueada | Contexto do navegador ou parâmetros da tarefa não correspondem | Compare URL, sessão, agente do usuário, tempo e requisitos documentados |
| Custo aumenta enquanto registros aceitos permanecem estáticos | Escalação de navegador ou modelo é muito ampla | Adicione filtros determinísticos e orçamentos por tarefa |
| Linhas duplicadas aparecem após tentativas | Armazenamento não é idempotente | Atualize por chave de origem estável e versão de conteúdo |
| HTTP 429 repete | Concorrência é controlada por trabalhador, não globalmente | Introduza um orçamento de taxa compartilhado e respeite as orientações de tentativa |
Conclusão
O GLM-5.3 pode tornar a extração de dados da web mais flexível, mas a confiabilidade vem do sistema ao redor. Mantenha controle de acesso, renderização, classificação de estado da página, tratamento de verificação, validação de esquema e armazenamento como estágios explícitos. Use o modelo apenas após a aplicação ter confirmado que está olhando para o conteúdo pretendido.
Para um fluxo de navegador autorizado com uma tarefa de verificação suportada, CapSolver pode fornecer a fronteira da tarefa documentada. A aplicação permanece responsável por permissão, continuidade da sessão, tentativas limitadas, tratamento de segredos e prova de que o fluxo original foi concluído.
Fontes e leitura adicional
- Repositório oficial do GLM-5.3 e GLM-5.3-Flash
- Exemplo de API Z.ai MCP e chat-completions
- API createTask do CapSolver
- API getTaskResult do CapSolver
Perguntas frequentes
Q: O GLM-5.3 pode substituir um navegador em raspagem de web?
Não. Ele pode interpretar texto, capturas de tela ou registros normalizados, mas um navegador ou cliente HTTP ainda é responsável pela navegação, renderização, estado, permissões e verificação do resultado final.
Q: O HTML bruto deve ser enviado diretamente para o GLM-5.3?
Normalmente não. Classifique a resposta primeiro, remova scripts e ruído de layout repetido, preservando rótulos e estrutura significativos, e limite a entrada aos dados necessários pelo esquema de extração.
Q: Quando o fluxo de trabalho deve chamar o CapSolver?
Apenas após detectar uma tarefa suportada em um fluxo de trabalho permitido. Use o tipo de tarefa atualmente documentado, preservando o contexto do navegador necessário, defina um prazo e verifique se a página realmente continuou.
Q: Um JSON válido significa que o registro extraído está correto?
Não. A sintaxe JSON não comprova a precisão fática. Campos obrigatórios, tipos, URLs, datas, intervalos numéricos, duplicatas e evidências da fonte ainda devem ser verificados no código.
Q: O que deve acontecer quando o estado da página for desconhecido?
Pare e solicite revisão. Não envie conteúdo desconhecido para o modelo ou tente novamente por meio de etapas adicionais de navegador e verificação.
Q: O design pode ser usado para dados privados ou restritos?
O design não cria permissão. Use-o apenas para dados públicos ou de outra forma autorizados, minimize as informações coletadas e siga os termos, contratos e leis aplicáveis.
Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.
Mais

Como Retornar Resultados de Ferramentas CAPTCHA que um Agente de IA Possa Usar
Leia corretamente os resultados da ferramenta de CAPTCHA: distinga erros de transporte, tarefas pendentes, saída do solucionador e sucesso no navegador antes de permitir que um agente de IA continue.

Adélia Cruz
30-Oct-2026

Como Correspondenciar Resultados de CAPTCHA a Tarefas Paralelas de Agente de Navegador
Impeça que agentes de navegador paralelos misturem resultados de CAPTCHA. Mapeie IDs de tarefa para os donos das páginas, rejeite respostas obsoletas e teste o roteamento antes de aplicar uma solução.

Adélia Cruz
29-Oct-2026

Como Escolher entre uma API de CAPTCHA e MCP para Agentes de IA
Escolha uma API de CAPTCHA ou MCP para o seu agente de IA comparando o controle de tarefas, a descoberta de ferramentas, o tratamento de resultados e as responsabilidades do navegador antes de integrar.

Adélia Cruz
29-Oct-2026

Como corrigir chamadas MCP de CAPTCHA usando a sessão de navegador errada
Diagnostique chamadas MCP de CAPTCHA que abrem uma sessão de navegador diferente. Inspecione as entradas da ferramenta, mantenha a página original e verifique a tarefa antes de continuar.

Adélia Cruz
28-Oct-2026

Como configurar as ferramentas MCP de solução de CAPTCHA no Qwen Code
Conecte as ferramentas MCP de resolução de CAPTCHA ao Qwen Code, aprove o servidor do projeto, verifique sua conexão e escolha o token ou fluxo de trabalho de navegador adequado para a sua tarefa.

Adélia Cruz
26-Oct-2026

Como adicionar ferramentas de detecção de CAPTCHA aos agentes Haystack
Adicione uma ferramenta de inspeção de CAPTCHA ao Haystack, leia os parâmetros do reCAPTCHA com o SDK oficial e verifique a conexão antes de uma etapa separada de resolução.

Adélia Cruz
22-Oct-2026


