Integrations

Bright Data + CaptchaAI: setup proxy yang jarang kena CAPTCHA

Proxy paling mahal pun tidak menjamin bebas CAPTCHA — itu soal reputasi IP, urusan Bright Data, bukan CaptchaAI. Bright Data (dulu Luminati) menyediakan 72 juta+ IP residensial di 195 negara supaya traffic Anda terlihat wajar; CaptchaAI menyelesaikan reCAPTCHA, Turnstile, atau Cloudflare Challenge begitu tantangan muncul.

Kombinasi ini masuk akal untuk tim scraping Indonesia yang mengerjakan proyek lepas (Upwork, Fastwork) atau pemantauan harga: Bright Data ditagih per bandwidth, CaptchaAI memakai skema thread bulanan dengan solve tanpa batas — biaya CAPTCHA tidak melonjak walau traffic harian berubah-ubah.


Langkah cepat: dari kredensial ke token CAPTCHA tervalidasi

Urutan setup yang dipakai kebanyakan tim sebelum menjalankan scraping penuh:

  1. Daftar Bright Data, aktifkan zone residensial atau ISP, lalu catat customer ID, zone, dan password.
  2. Daftar CaptchaAI dan salin API key dari dashboard.
  3. Jalankan satu request percobaan lewat proxy Bright Data, lalu kirim sitekey yang muncul ke CaptchaAI untuk solve pertama.
  4. Kalau alur melibatkan form, aktifkan sesi sticky di Bright Data supaya token dari CaptchaAI tidak ditolak karena IP berubah.

Cara kerja integrasi: proxy dan solver berjalan terpisah

Your Script ──▶ Bright Data Proxy ──▶ Target Site
                                          │
                                    CAPTCHA appears
                                          │
                                    CaptchaAI API ──▶ Solved token
                                          │
                            Inject token ◀─┘

CaptchaAI tidak lewat proxy Bright Data Anda — solve berjalan di server CaptchaAI sendiri, terpisah dari browsing. Bright Data mengurus IP; CaptchaAI mengurus tantangan CAPTCHA yang muncul. Untuk situs yang memvalidasi IP ketat, API CaptchaAI menerima parameter proxy agar solve jalan dari IP Bright Data yang sama.


Tipe proxy Bright Data: mana paling jarang kena CAPTCHA?

Bright Data punya empat tipe proxy dengan trade-off kecepatan, biaya, dan risiko CAPTCHA yang beda — tabel berikut jadi acuan cepat sebelum pilih zone:

Tipe IP Kecepatan Biaya Tingkat CAPTCHA
Datacenter 770K+ Cepat Rendah Lebih tinggi
Residensial 72 juta+ Sedang Sedang Lebih rendah
ISP 700K+ Cepat Tinggi Terendah
Mobile 7 juta+ Lambat Tinggi Sangat rendah

Integrasi Python: request langsung ke situs target

import requests
import time

CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"

# Bright Data proxy credentials
BRIGHT_DATA_PROXY = {
    "http": "http://brd-customer-CUSTOMER_ID-zone-ZONE:PASSWORD@brd.superproxy.io:22225",
    "https": "http://brd-customer-CUSTOMER_ID-zone-ZONE:PASSWORD@brd.superproxy.io:22225",
}


def fetch_with_proxy(url):
    """Fetch a page through Bright Data proxy."""
    resp = requests.get(
        url,
        proxies=BRIGHT_DATA_PROXY,
        headers={
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
            "AppleWebKit/537.36 (KHTML, like Gecko) "
            "Chrome/126.0.0.0 Safari/537.36"
        },
        timeout=30,
    )
    return resp


def solve_recaptcha(site_url, sitekey):
    """Solve reCAPTCHA v2 via CaptchaAI."""
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "json": 1,
    })
    data = resp.json()
    if data["status"] != 1:
        raise Exception(f"Submit: {data['request']}")

    task_id = data["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY,
            "action": "get",
            "id": task_id,
            "json": 1,
        })
        data = resp.json()
        if data["request"] == "CAPCHA_NOT_READY":
            continue
        if data["status"] == 1:
            return data["request"]
        raise Exception(f"Solve: {data['request']}")

    raise TimeoutError("Solve timeout")


def solve_turnstile(site_url, sitekey):
    """Solve Cloudflare Turnstile via CaptchaAI."""
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "turnstile",
        "sitekey": sitekey,
        "pageurl": site_url,
        "json": 1,
    })
    data = resp.json()
    task_id = data["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY,
            "action": "get",
            "id": task_id,
            "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            return data["request"]

    raise TimeoutError("Solve timeout")

Integrasi Python: Selenium untuk situs yang butuh browser penuh

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

BRIGHT_DATA_HOST = "brd.superproxy.io"
BRIGHT_DATA_PORT = 22225
BRIGHT_DATA_USER = "brd-customer-CUSTOMER_ID-zone-residential"
BRIGHT_DATA_PASS = "PASSWORD"


def create_driver_with_proxy():
    options = webdriver.ChromeOptions()
    options.add_argument(
        f"--proxy-server=http://{BRIGHT_DATA_HOST}:{BRIGHT_DATA_PORT}"
    )
    options.add_argument("--window-size=1920,1080")

    driver = webdriver.Chrome(options=options)
    return driver


def scrape_with_captcha_solving(url, sitekey=None):
    driver = create_driver_with_proxy()

    try:
        driver.get(url)
        time.sleep(3)

        # Auto-detect sitekey if not provided
        if not sitekey:
            sitekey = driver.execute_script(
                "return document.querySelector('[data-sitekey]')"
                "?.getAttribute('data-sitekey')"
            )

        if sitekey:
            token = solve_recaptcha(url, sitekey)

            driver.execute_script(f"""
                document.querySelector('#g-recaptcha-response').value = '{token}';
                document.querySelectorAll('[name="g-recaptcha-response"]')
                    .forEach(el => {{ el.value = '{token}'; }});
            """)

            # Trigger callback
            driver.execute_script("""
                if (typeof ___grecaptcha_cfg !== 'undefined') {
                    const clients = ___grecaptcha_cfg.clients;
                    for (const key in clients) {
                        for (const prop in clients[key]) {
                            const val = clients[key][prop];
                            if (val && typeof val === 'object') {
                                for (const p in val) {
                                    if (typeof val[p]?.callback === 'function') {
                                        val[p].callback(arguments[0]);
                                    }
                                }
                            }
                        }
                    }
                }
            """)

        return driver.page_source

    finally:
        driver.quit()

Targeting negara dan kota supaya CAPTCHA jarang muncul

Bright Data bisa diarahkan sampai level kota — makin dekat lokasi proxy dengan situs target, makin kecil kemungkinan CAPTCHA dipicu:

# Country targeting
proxy_us = "http://brd-customer-ID-zone-residential-country-us:PASS@brd.superproxy.io:22225"
proxy_uk = "http://brd-customer-ID-zone-residential-country-gb:PASS@brd.superproxy.io:22225"
proxy_de = "http://brd-customer-ID-zone-residential-country-de:PASS@brd.superproxy.io:22225"

# City targeting
proxy_nyc = "http://brd-customer-ID-zone-residential-country-us-city-newyork:PASS@brd.superproxy.io:22225"

# Use the geo-matched proxy for lower CAPTCHA rates
def scrape_localized(url, country="us"):
    proxy = f"http://brd-customer-ID-zone-residential-country-{country}:PASS@brd.superproxy.io:22225"
    resp = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)
    return resp

Kalau data yang di-scrape menyangkut informasi pribadi, ingat UU Pelindungan Data Pribadi (UU 27/2022) dan UU ITE — scrape hanya data yang memang berwenang Anda proses, dan jangan simpan data pribadi tanpa dasar yang jelas.


Sesi sticky vs rotating: mana aman untuk CAPTCHA?

# Sticky session (same IP for entire session)
proxy_sticky = (
    "http://brd-customer-ID-zone-residential"
    "-session-abc123:PASS@brd.superproxy.io:22225"
)

# Rotating (new IP each request)
proxy_rotating = (
    "http://brd-customer-ID-zone-residential:PASS@brd.superproxy.io:22225"
)

Untuk workflow CAPTCHA, pakai sesi sticky. Token dari CaptchaAI terikat ke IP yang memuat halaman — kalau IP berganti sebelum submit, situs target menolaknya. Rotating aman hanya untuk crawling murni tanpa form CAPTCHA.


Integrasi Node.js + Bright Data + CaptchaAI

const axios = require("axios");
const https = require("https");

const CAPTCHAAI_KEY = "YOUR_API_KEY";
const CAPTCHAAI_URL = "https://ocr.captchaai.com";

const proxyAgent = new (require("https-proxy-agent"))(
  "http://brd-customer-ID-zone-residential:PASS@brd.superproxy.io:22225"
);

async function fetchWithProxy(url) {
  return axios.get(url, {
    httpsAgent: proxyAgent,
    headers: {
      "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0",
    },
  });
}

async function solveCaptcha(siteUrl, sitekey) {
  const submit = await axios.post(`${CAPTCHAAI_URL}/in.php`, null, {
    params: {
      key: CAPTCHAAI_KEY,
      method: "userrecaptcha",
      googlekey: sitekey,
      pageurl: siteUrl,
      json: 1,
    },
  });

  const taskId = submit.data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));

    const result = await axios.get(`${CAPTCHAAI_URL}/res.php`, {
      params: {
        key: CAPTCHAAI_KEY,
        action: "get",
        id: taskId,
        json: 1,
      },
    });

    if (result.data.request === "CAPCHA_NOT_READY") continue;
    if (result.data.status === 1) return result.data.request;
  }

  throw new Error("Timeout");
}

Alur di Node.js sama persis dengan Python: submit task ke in.php, polling res.php sampai statusnya siap, lalu suntikkan token ke form sebelum submit.


Setelan zone Bright Data untuk CAPTCHA

Pengaturan Zone Direkomendasikan untuk CAPTCHA Alasan
Tipe proxy Residensial Tingkat pemicu CAPTCHA terendah
Penargetan negara Cocokkan lokasi situs target Konsistensi IP ↔ konten
Tipe sesi Sticky Token harus cocok dengan IP asal
Filter kualitas IP Kualitas tinggi Hindari IP yang ditandai
Maks concurrent 100+ Alur kerja CAPTCHA paralel

Masalah proxy dan CAPTCHA yang sering muncul

Sebagian besar error di kombinasi ini jatuh ke lima pola berikut — cek tabelnya sebelum debug manual:

Masalah Penyebab Solusi
407 dari proxy Kredensial salah Verifikasi ID pelanggan, zone, dan password
CAPTCHA muncul setiap permintaan Proxy datacenter terdeteksi Beralih ke zone residensial
Token ditolak IP berubah antara solve dan submit Gunakan sesi sticky
Respons lambat Node exit yang padat Target negara/kota yang kurang populer
Koneksi ditolak Batas bandwidth tercapai Periksa dasbor Bright Data

Pertanyaan seputar Bright Data + CaptchaAI

Apakah CaptchaAI ikut memakai proxy Bright Data saya untuk mengirim request?

Tidak. Browser Anda memuat halaman lewat proxy Bright Data; yang dikirim ke CaptchaAI hanyalah page URL dan sitekey. Solve tetap jalan di infrastruktur CaptchaAI sendiri, kecuali Anda meneruskan parameter proxy agar solve jalan dari IP yang sama.

Kenapa kombinasi ini lebih hemat dibanding proxy datacenter murah yang sering kena CAPTCHA?

IP datacenter murah tapi reputasinya dikenal sistem deteksi bot, jadi lebih sering memicu tantangan. Zone residensial atau ISP menurunkan frekuensi itu, sisanya ditangani CaptchaAI dengan skema thread bulanan — bukan per-solve — jadi biaya tidak melonjak walau traffic naik-turun.

Apakah kombinasi ini bisa dipakai untuk situs yang pakai hCaptcha?

Belum. CaptchaAI mendukung reCAPTCHA v2/v3, Cloudflare Turnstile, Cloudflare Challenge, GeeTest v3, CAPTCHA gambar/grid, dan BLS — hCaptcha serta FunCaptcha (Arkose Labs) belum didukung. Proxy Bright Data tetap membantu menurunkan trigger rate, tapi tantangan hCaptcha-nya butuh layanan solver lain.

Sesi sticky atau rotating, mana yang aman dipakai bareng CaptchaAI?

Sticky untuk semua alur yang melibatkan CAPTCHA — token dari CaptchaAI terikat ke IP yang memuat halaman. Rotating hanya aman untuk crawling murni tanpa form yang perlu diselesaikan.

Apakah lokasi zone Bright Data mempengaruhi kecepatan solve CaptchaAI?

Secara tidak langsung, ya. Kalau server Anda di Asia Tenggara, arahkan zone Bright Data ke region yang sama — misalnya AWS ap-southeast-1 (Singapura) atau GCP asia-southeast2 (Jakarta) — supaya request lebih cepat sampai ke CaptchaAI. Zone jauh menambah latensi jaringan, bukan waktu solve itu sendiri.


Panduan Terkait


Gabungkan proxy Bright Data dengan penyelesaian CAPTCHA otomatis — ambil API key CaptchaAI Anda dan jalankan scraping tanpa terhenti CAPTCHA.

Komentar dinonaktifkan untuk artikel ini.