CAPSOLVER
Blog
GLM-5.3 Penyedotan Web: Ekstraksi yang Handal dan Penanganan CAPTCHA

GLM-5.3 Pengambilan Data Web: Bangun Pipeline Ekstraksi yang Handal dengan Penanganan CAPTCHA

Logo of CapSolver

Aloísio Vítor

How to use CapSolver

29-Sep-2026

TL;DR

  • Gunakan GLM-5.3 setelah akses dan rendering, bukan sebagai pengganti lapisan browser. Model harus menerima teks halaman yang diizinkan, screenshot, atau catatan yang dinormalkan hanya setelah aplikasi mengklasifikasikan respons.
  • Pisahkan akses, penanganan tantangan, ekstraksi, dan validasi. Ini memungkinkan perbedaan antara hasil kosong dan halaman login, batas kecepatan, shell JavaScript, atau checkpoint CAPTCHA.
  • Gunakan CapSolver hanya untuk tugas verifikasi yang didukung dalam alur kerja yang diizinkan. Pertahankan sesi browser, URL situs, parameter tugas, anggaran ulang, dan validasi halaman akhir di bawah kendali aplikasi.
  • Haruskan output yang terstruktur dari GLM-5.3 dan validasi di kode. Respons JSON yang sintaksisnya valid masih bisa berisi nilai yang hilang, duplikat, atau tidak didukung.
  • Simpan bukti dengan setiap catatan. URL sumber, waktu ekstraksi, hash konten, dan status validasi membuat alur kerja AI dan data di downstream lebih mudah diaudit.

Pengantar: Di mana GLM-5.3 cocok dalam pipeline pengambilan data web

Model bahasa besar dapat mengubah konten web yang tidak konsisten menjadi catatan yang berguna, tetapi tidak menghilangkan pekerjaan operasional yang diperlukan untuk mendapatkan data halaman yang dapat dipercaya. Pipeline produksi masih membutuhkan pemeriksaan izin, batas permintaan, eksekusi browser ketika JavaScript diperlukan, penanganan eksplisit untuk checkpoint verifikasi, dan validasi deterministik sebelum catatan mencapai basis data.

GLM-5.3 berguna di lapisan interpretasi. Alur kerja yang kompatibel dengan API-nya dapat mengklasifikasikan konten yang dirender, memetakan teks ke skema, menjelaskan mengapa suatu bidang hilang, dan membantu menormalkan perbedaan antara halaman. Untuk otomasi yang diizinkan yang menemui tugas verifikasi yang didukung, CapSolver dapat ditempatkan sebelum ekstraksi sementara aplikasi mempertahankan kendali sesi halaman dan memverifikasi hasil akhir.

Panduan ini menyajikan arsitektur umum bukan instruksi untuk situs web tertentu. Gunakan hanya untuk data publik atau lainnya yang diizinkan dan hentikan ketika alur kerja mencapai login, pembayaran, data pribadi, atau batas izin di luar cakupan yang disetujui.

Arsitektur yang andal: akses dulu, model kemudian

Sistem pengambilan data web GLM-5.3 yang kuat menggunakan urutan tahapan kecil. Setiap tahapan menghasilkan hasil bertipe yang dapat diverifikasi oleh tahapan berikutnya.

Tahapan Tanggung Jawab Output yang Diharapkan Kondisi Berhenti
Pintu Persetujuan Periksa target, cakupan data, kecepatan, dan tujuan Definisi pekerjaan yang disetujui Cakupan tidak diizinkan
Lapisan Akses Unduh atau render halaman Status, header, URL akhir, HTML atau screenshot Login, pembayaran, data pribadi, atau akses ditolak
Klasifikator Respons Identifikasi konten, shell kosong, batas kecepatan, atau halaman verifikasi Nama status halaman Status tidak dikenal atau tidak didukung
Adapter Verifikasi Kirim satu tugas yang didokumentasikan ketika diizinkan Siap, sedang diproses, atau kesalahan terminal Batas waktu atau anggaran percobaan tercapai
Ekstraksi GLM Ubah konten yang diizinkan menjadi skema yang ketat Catatan JSON kandidat Output tidak valid atau tidak didukung oleh bukti
Validasi Deterministik Periksa tipe, bidang yang diperlukan, duplikat, dan bukti sumber Catatan yang diterima atau penolakan eksplisit Aturan bisnis apa pun gagal
Penyimpanan Lakukan tulisan idempoten ID catatan yang stabil dan tautan jejak Kunci sumber sudah ada tanpa versi baru

Batasan yang paling penting adalah antara akses dan interpretasi. Jika model menerima HTML halaman tantangan, mungkin akan dengan percaya diri menggambarkan halaman tersebut sebagai konten target. Klaskan respons sebelum memicu model.

Prasyarat

Contoh orkestrasi menggunakan Python 3.11 atau lebih baru dan paket requests. Simpan kredensial di variabel lingkungan dan jangan pernah sertakan mereka dalam kode sumber, prompt, log, screenshot, atau konfigurasi yang dikirimkan.

bash Copy
python -m venv .venv
source .venv/bin/activate
pip install requests

export ZAI_API_KEY="ganti-dengan-kunci-z-ai-anda"
export CAPSOLVER_API_KEY="ganti-dengan-kunci-capsolver-anda"

Dokumentasi API Z.ai resmi menggunakan endpoint chat-completions di https://api.z.ai/api/paas/v4/chat/completions. Konfirmasikan identifikasi model saat ini di repositori GLM-5 atau konsol Z.ai sebelum deployment; panduan ini menggunakan glm-5.3-flash sebagai default yang dikonfigurasi lingkungan.

Langkah 1: Menentukan kontrak ekstraksi yang ketat

Jangan minta model untuk "ekstrak semua yang penting." Tetapkan bidang, perilaku null yang diizinkan, dan persyaratan bukti sebelum mengumpulkan halaman.

python Copy
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

Model hanya diizinkan mengembalikan null ketika skema secara eksplisit memungkinkannya. Nilai yang diperlukan harus diverifikasi terhadap bukti halaman oleh kode biasa.

Langkah 2: Mengklasifikasikan halaman sebelum mengirimkannya ke GLM-5.3

Lapisan akses harus mengembalikan objek kecil berstatus daripada hanya string HTML. Klasifikator dapat menggunakan kode status, URL akhir, tipe konten, selektor yang diharapkan, dan tanda checkpoint yang diketahui.

python Copy
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 dan HTTP 429 tidak boleh masuk ke loop ulang umum. Permintaan yang ditolak memerlukan tinjauan izin dan konfigurasi. Permintaan yang dibatasi kecepatan memerlukan pengurangan konkurensi global dan menghormati jendela ulang yang disediakan server.

Langkah 3: Menangani verifikasi dengan batas

API resmi CapSolver menggunakan createTask untuk mengirim tugas yang didokumentasikan. Tugas asinkron diperiksa dengan getTaskResult. Aplikasi harus memilih jenis tugas dari dokumentasi tugas saat ini dan hanya melewatkan bidang yang diperlukan untuk checkpoint yang diizinkan.

python Copy
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")

Panggilan harus mengizinkan satu upaya terbatas secara default. Solusi yang dikembalikan harus diterapkan melalui jalur integrasi yang didokumentasikan dalam konteks browser yang sama yang mendeteksi checkpoint. Jika halaman tidak berpindah ke status yang diharapkan, kembalikan kegagalan atau minta tinjauan manusia.

Klaim Kode Bonus CapSolver Anda

Tingkatkan anggaran otomasi Anda secara instan!
Gunakan kode bonus CAP26 saat menambahkan dana ke akun CapSolver Anda untuk mendapatkan tambahan 5% bonus pada setiap penyetoran — tanpa batas.
Klaim sekarang di Dashboard CapSolver Anda
Kode Bonus

Langkah 4: Mengirim konten yang dinormalkan ke GLM-5.3

Setelah halaman dikonfirmasi sebagai konten, hapus kebisingan navigasi, skrip, elemen tersembunyi, banner berulang, dan chrome halaman yang tidak relevan. Pertahankan judul, label, tabel, dan referensi sumber. Jangan kirim cookie browser, header otorisasi, data pribadi, atau jejak sesi mentah ke model.

python Copy
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": [
            "Kembalikan satu objek JSON dan tidak ada prosa.",
            "Gunakan hanya bukti yang ada di page_text.",
            "Jangan infer nilai yang diperlukan hilang.",
            "Sertakan source_url tepat seperti yang diberikan.",
        ],
        "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": "Ekstrak data yang didukung bukti."},
                {"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)

Anggap contoh sebagai batas adapter. Konfirmasikan opsi permintaan saat ini dan fitur output yang terstruktur di dokumentasi Z.ai resmi sebelum penggunaan produksi. Jika model membungkus JSON dalam Markdown atau mengembalikan teks di luar kontrak, tolak respons daripada mencoba memperbaikinya secara diam-diam.

Langkah 5: Memvalidasi hasil browser dan catatan yang diekstraksi

Dua validasi berbeda diperlukan.

Pertama, validasi hasil browser. Konfirmasikan bahwa URL akhir, judul yang diharapkan, kontainer target, dan ketidakhadiran kesalahan baru sesuai dengan alur kerja yang diinginkan. Respons tugas yang sukses saja bukan bukti bahwa halaman terus berjalan.

Kedua, validasi catatan yang diekstraksi. Periksa string yang diperlukan, rentang numerik, tanggal, URL yang dinormalkan, kunci duplikat, dan potongan bukti. Untuk bidang yang berdampak tinggi, bandingkan nilai dengan selektor deterministik atau representasi kedua dari halaman.

python Copy
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)

Pintu akhir ini mencegah halaman tantangan, hallucinasi model, atau render parsial memasuki dataset sebagai pengambilan data yang sukses.

Observabilitas dan kontrol biaya

Catat ID jejak, URL sumber, URL akhir, status halaman, hash konten, nama model, versi prompt, versi skema, hasil validasi, dan waktu pemrosesan. Simpan ID tugas dan kode kesalahan untuk debugging operasional sementara, tetapi jangan simpan token solusi, rahasia, atau data sesi yang tidak relevan.

Terapkan satu anggaran untuk seluruh pekerjaan. Hitung percobaan HTTP, navigasi browser, percobaan verifikasi, panggilan GLM, karakter input, dan waktu yang berlalu. Ketika anggaran habis, kembalikan kegagalan bertipe daripada memungkinkan komponen satu untuk memulai ulang alur kerja.

Kumpulan metrik yang berguna termasuk:

  • persentase halaman yang diklasifikasikan sebagai konten nyata sebelum menggunakan model;
  • tingkat validasi skema;
  • tingkat catatan duplikat dan kosong;
  • biaya browser dan model per catatan yang diterima;
  • jumlah tinjauan manusia berdasarkan alasan berhenti;
  • keberhasilan end-to-end yang dikonfirmasi oleh bukti halaman akhir.

Mode kegagalan umum

Gejala Penyebab kemungkinan Tindakan yang benar
GLM mengembalikan detail tentang halaman verifikasi Respons tidak diklasifikasikan sebelum memicu Hentikan panggilan model dan perbaiki deteksi status halaman
JSON diuraikan tetapi bidang yang diperlukan kosong Prompt atau bukti sumber tidak lengkap Tolak catatan dan periksa konten yang dinormalkan
Tugas siap tetapi halaman tetap terblokir Konteks browser atau parameter tugas tidak sesuai Bandingkan URL, sesi, user agent, waktu, dan persyaratan yang didokumentasikan
Biaya meningkat sementara catatan yang diterima tetap datar Ekspansi browser atau model terlalu luas Tambahkan filter deterministik dan anggaran per pekerjaan
Baris duplikat muncul setelah ulang Penyimpanan tidak idempoten Upsert berdasarkan kunci sumber yang stabil dan versi konten
HTTP 429 berulang Konkurensi dikendalikan per pekerja, bukan secara global Tambahkan anggaran kecepatan bersama dan hormati panduan ulang

Kesimpulan

GLM-5.3 dapat membuat ekstraksi data web lebih fleksibel, tetapi keandalan berasal dari sistem di sekitarnya. Pertahankan kendali akses, rendering, klasifikasi status halaman, penanganan verifikasi, validasi skema, dan penyimpanan sebagai tahapan eksplisit. Gunakan model hanya setelah aplikasi memastikan bahwa itu melihat konten yang diinginkan.

Untuk alur kerja browser yang diizinkan dengan tugas verifikasi yang didukung, CapSolver dapat memberikan batas tugas yang didokumentasikan. Aplikasi tetap bertanggung jawab atas izin, kelanjutan sesi, ulang terbatas, penanganan rahasia, dan bukti bahwa alur kerja asli selesai.

Sumber dan bacaan lanjutan

Pertanyaan Umum

Q: Apakah GLM-5.3 dapat menggantikan browser dalam web scraping?

Tidak. Ia dapat memahami teks, tangkapan layar, atau catatan yang dinormalkan, tetapi browser atau klien HTTP tetap mengelola navigasi, rendering, state, izin, dan verifikasi hasil akhir.

Q: Apakah HTML mentah sebaiknya dikirim langsung ke GLM-5.3?

Biasanya tidak. Klasifikasikan respons terlebih dahulu, hapus skrip dan kebisingan tata letak yang berulang, pertahankan label dan struktur yang berarti, dan batasi input hanya pada data yang diperlukan oleh skema ekstraksi.

Q: Kapan alur kerja harus memanggil CapSolver?

Hanya setelah mendeteksi tugas yang didukung dalam alur kerja yang diizinkan. Gunakan jenis tugas yang saat ini didokumentasikan, pertahankan konteks browser yang diperlukan, tetapkan tenggat waktu, dan verifikasi bahwa halaman benar-benar dilanjutkan.

Q: Apakah JSON yang valid berarti catatan yang diekstraksi benar?

Tidak. Sintaks JSON tidak membuktikan akurasi fakta. Bidang yang diperlukan, tipe, URL, tanggal, rentang numerik, duplikat, dan bukti sumber masih harus diperiksa dalam kode.

Q: Apa yang harus dilakukan jika state halaman tidak diketahui?

Berhenti dan minta tinjauan. Jangan kirim konten yang tidak diketahui ke model atau coba ulang melalui langkah browser dan verifikasi tambahan.

Q: Apakah desain ini dapat digunakan untuk data pribadi atau terbatas?

Desain ini tidak menciptakan izin. Gunakan hanya untuk data publik atau data yang diizinkan lainnya, minimalisir informasi yang dikumpulkan, dan patuhi ketentuan, kontrak, dan hukum yang berlaku.

Pernyataan Kepatuhan: Informasi yang diberikan di blog ini hanya untuk tujuan informasi. CapSolver berkomitmen untuk mematuhi semua hukum dan peraturan yang berlaku. Penggunaan jaringan CapSolver untuk kegiatan ilegal, penipuan, atau penyalahgunaan sangat dilarang dan akan diselidiki. Solusi penyelesaian captcha kami meningkatkan pengalaman pengguna sambil memastikan kepatuhan 100% dalam membantu menyelesaikan kesulitan captcha selama pengambilan data publik. Kami mendorong penggunaan layanan kami secara bertanggung jawab. Untuk informasi lebih lanjut, silakan kunjungi Syarat Layanan dan Kebijakan Privasi.

Lebih lanjut

Hasil CAPTCHA melewati pemeriksaan terpisah oleh alat, penyelesai, dan peramban sebelum agen AI melanjutkan.
Cara Mengembalikan Hasil Alat CAPTCHA yang Dapat Digunakan Agen AI

Baca hasil alat CAPTCHA dengan benar: bedakan kesalahan transport, tugas yang masih tertunda, keluaran solver, dan keberhasilan browser sebelum membiarkan agen AI melanjutkan.

ai
Logo of CapSolver

Anh Tuan

30-Oct-2026

Dua tugas browser menerima hasil CAPTCHA masing-masing bahkan ketika tugas kedua selesai lebih dulu.
Cara Mencocokkan Hasil CAPTCHA dengan Tugas Agen Peramban Paralel

Jaga agar agen browser paralel tidak mencampur hasil CAPTCHA. Petakan ID tugas ke pemilik halaman, tolak respons yang sudah kedaluwarsa, dan uji perutean sebelum menerapkan solusi.

ai
Logo of CapSolver

Nikolai Smirnov

29-Oct-2026

Dua rute untuk tugas CAPTCHA agen AI: permintaan API langsung atau pemanggilan alat MCP, diikuti oleh verifikasi aplikasi.
Cara Memilih Antara CAPTCHA API dan MCP untuk Agen AI

Pilih API CAPTCHA atau MCP untuk agen AI Anda dengan membandingkan kontrol tugas, penemuan alat, penanganan hasil, dan tanggung jawab browser sebelum Anda melakukan integrasi.

ai
Logo of CapSolver

Emma Foster

29-Oct-2026

Diagram yang memisahkan halaman aktif agen dari sesi browser MCP berbasis URL.
Cara Memperbaiki Panggilan CAPTCHA MCP yang Menggunakan Sesi Peramban yang Salah

Mendiagnosis panggilan MCP CAPTCHA yang membuka sesi browser berbeda. Periksa input alat, pertahankan halaman asli, dan verifikasi tugas sebelum melanjutkan.

ai
Logo of CapSolver

Emma Foster

28-Oct-2026

Qwen Code terhubung ke server MCP lokal yang disetujui yang menyediakan alat CAPTCHA.
Cara Mengatur Alat MCP CAPTCHA Solver di Qwen Code

Hubungkan alat MCP pemecah CAPTCHA ke Qwen Code, setujui server proyek, verifikasi koneksinya, dan pilih token atau alur kerja browser yang tepat untuk tugas Anda.

ai
Logo of CapSolver

Nikolai Smirnov

26-Oct-2026

Alat Haystack terhubung ke halaman browser dan hasil parameter CAPTCHA yang berisi tipe, URL, dan kunci situs.
Cara Menambahkan Alat Deteksi CAPTCHA ke Haystack Agents

Tambahkan alat inspeksi CAPTCHA ke Haystack, baca parameter reCAPTCHA dengan SDK resmi, dan verifikasi koneksi sebelum langkah penyelesaian terpisah.

ai
Logo of CapSolver

Rajinder Singh

22-Oct-2026