Proxy dan solver CAPTCHA mengerjakan dua hal yang berbeda, dan justru itu alasan keduanya dipakai bersama:
- Proxy Oxylabs menentukan dari IP mana request Anda keluar dan menjaga IP tetap bersih serta tersebar.
- CaptchaAI menyelesaikan reCAPTCHA v2, Turnstile, dan tantangan lain yang tetap muncul di IP mana pun.
Gabungkan keduanya dan Anda punya pipeline scraping yang stabil — request lewat IP bersih, token CAPTCHA balik dalam hitungan detik. Panduan ini menunjukkan pola integrasinya di Python, dari routing satu request sampai menjalankan puluhan URL secara paralel. Bagi tim scraping di Indonesia yang menagih klien berdasarkan volume, pemisahan ini juga soal biaya: bandwidth dibayar ke Oxylabs, konkurensi (thread) dibayar ke CaptchaAI, sehingga tiap sisi bisa diukur dan dihemat sendiri.
Memilih produk proxy Oxylabs untuk alur CAPTCHA
Oxylabs punya beberapa lini produk. Untuk kerja scraping ber-CAPTCHA, pilihan intinya ada di dua baris pertama: kecepatan proxy pusat data versus kebersihan IP residensial.
| Produk | Jumlah IP | Kecepatan | Cocok untuk |
|---|---|---|---|
| Proxy pusat data (datacenter) | 2 juta+ | Sangat cepat | Volume tinggi, kecepatan utama |
| IP residensial | 100 juta+ | Sedang | Situs sensitif terhadap CAPTCHA |
| Proxy ISP | Kelas residensial | Cepat | E-commerce, media sosial |
| IP seluler | 20 juta+ | Lambat | Target khusus seluler |
| SERP Scraper API | Terkelola | Cepat | Hasil Google/Bing |
Aturan praktisnya sederhana:
- Proxy pusat data memicu CAPTCHA lebih sering, tetapi jauh lebih cepat dan murah per request.
- IP residensial memancing lebih sedikit tantangan, tetapi berbayar per GB dan lebih lambat.
Karena CaptchaAI menyelesaikan CAPTCHA apa pun yang lolos, banyak tim justru berani memakai proxy pusat data yang murah dan menyerahkan tantangannya ke solver.
Integrasi dengan Python
Alur inti CaptchaAI selalu empat langkah yang sama, apa pun proxy-nya:
- Kirim tantangan ke
in.phpbersamasitekeydanpageurl. - Simpan task ID yang dikembalikan.
- Polling
res.phpsampai token siap. - Pakai token pada request submit Anda.
Routing request lewat proxy Oxylabs
Pola dasarnya: bungkus setiap request dengan kredensial proxy Oxylabs, lalu panggil CaptchaAI hanya saat sebuah halaman menuntut CAPTCHA. Fungsi fetch_page menambahkan penargetan negara opsional, sementara solve_recaptcha menjalankan siklus empat langkah di atas.
import requests
import time
OXYLABS_USER = "customer-USERNAME"
OXYLABS_PASS = "PASSWORD"
OXYLABS_ENDPOINT = "pr.oxylabs.io:7777"
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
# Residential rotasi egress jaringan yang diotorisasi
proxies = {
"http": f"http://{OXYLABS_USER}:{OXYLABS_PASS}@{OXYLABS_ENDPOINT}",
"https": f"http://{OXYLABS_USER}:{OXYLABS_PASS}@{OXYLABS_ENDPOINT}",
}
def fetch_page(url, country=None):
"""Fetch page through Oxylabs proxy."""
user = OXYLABS_USER
if country:
user += f"-cc-{country}"
proxy = {
"http": f"http://{user}:{OXYLABS_PASS}@{OXYLABS_ENDPOINT}",
"https": f"http://{user}:{OXYLABS_PASS}@{OXYLABS_ENDPOINT}",
}
return requests.get(
url,
proxies=proxy,
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/126.0.0.0 Safari/537.36"
},
timeout=30,
)
def solve_recaptcha(site_url, sitekey):
"""Solve 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("Timeout")
Menjaga IP tetap dengan sticky session
CAPTCHA sering muncul di tengah alur multi-langkah — buka form, isi, submit. Kalau IP berganti di tengah jalan, sesi bisa gugur dan tantangan berulang. Sticky session Oxylabs mengunci satu IP untuk seluruh langkah, sehingga token yang Anda ambil masih valid saat di-submit.
def get_oxylabs_sticky_proxy(session_id, country=None):
"""Create Oxylabs sticky session (same IP)."""
user = OXYLABS_USER + f"-sessid-{session_id}"
if country:
user += f"-cc-{country}"
proxy_url = f"http://{user}:{OXYLABS_PASS}@{OXYLABS_ENDPOINT}"
return {"http": proxy_url, "https": proxy_url}
# CAPTCHA workflow with sticky IP
import random, string
session = "".join(random.choices(string.ascii_lowercase, k=8))
proxy = get_oxylabs_sticky_proxy(session, country="us")
# All requests use the same IP
resp = requests.get("https://staging.example.com/qa-form", proxies=proxy)
# ... solve CAPTCHA ...
resp = requests.post("https://target.com/submit", proxies=proxy, data={
"g-recaptcha-response": token,
})
Menggabungkan Web Scraper API Oxylabs dengan CaptchaAI
Sebagian situs perlu rendering JavaScript penuh sebelum CAPTCHA-nya bahkan tampil. Web Scraper API Oxylabs menangani rendering itu; setelah HTML kembali, Anda deteksi data-sitekey dan serahkan ke CaptchaAI.
def scrape_with_oxylabs_api(url):
"""Use Oxylabs Web Scraper API for rendering, CaptchaAI for CAPTCHAs."""
resp = requests.post(
"https://realtime.oxylabs.io/v1/queries",
auth=(OXYLABS_USER, OXYLABS_PASS),
json={
"source": "universal",
"url": url,
"render": "html",
"browser_instructions": [
{"type": "wait", "wait_time_s": 3},
],
},
)
result = resp.json()
html = result["results"][0]["content"]
# Check for CAPTCHA in rendered HTML
import re
sitekey_match = re.search(r'data-sitekey="([^"]+)"', html)
if sitekey_match:
sitekey = sitekey_match.group(1)
token = solve_recaptcha(url, sitekey)
return {"html": html, "captcha_solved": True, "token": token}
return {"html": html, "captcha_solved": False}
Kapan pakai proxy pusat data, kapan IP residensial
Keputusan ini paling menentukan biaya. Pilih tipe proxy per target, bukan satu tipe untuk semua:
- Target sensitif (banyak proteksi): mulai dari IP residensial agar tantangan lebih jarang.
- Target volume tinggi (proteksi ringan): pakai proxy pusat data yang cepat, biarkan CaptchaAI menuntaskan CAPTCHA yang muncul.
Fungsi smart_proxy_selection di bawah menerapkan logika itu langsung dari flag sensitivitas.
# Datacenter: Fast but higher CAPTCHA rate
DC_PROXY = {
"http": f"http://{OXYLABS_USER}:{OXYLABS_PASS}@dc.pr.oxylabs.io:10000",
"https": f"http://{OXYLABS_USER}:{OXYLABS_PASS}@dc.pr.oxylabs.io:10000",
}
# Residential: Slower but lower CAPTCHA rate
RES_PROXY = {
"http": f"http://{OXYLABS_USER}:{OXYLABS_PASS}@pr.oxylabs.io:7777",
"https": f"http://{OXYLABS_USER}:{OXYLABS_PASS}@pr.oxylabs.io:7777",
}
def smart_proxy_selection(url, captcha_sensitive=True):
"""Pick proxy type based on target site sensitivity."""
if captcha_sensitive:
return RES_PROXY # Less likely to trigger CAPTCHA
return DC_PROXY # Faster, CaptchaAI handles any CAPTCHAs
Menjalankan banyak URL secara paralel
Untuk skala nyata, jalankan beberapa URL sekaligus. Tiap worker mendapat sticky session sendiri, dan tiap CAPTCHA yang ditemukan diselesaikan lewat CaptchaAI. Jumlah max_workers di sini sebaiknya selaras dengan jumlah thread di paket CaptchaAI Anda — satu tantangan aktif menempati satu thread. Deploy worker di region terdekat seperti AWS ap-southeast-1 (Singapura) atau ap-southeast-3 (Jakarta) untuk menekan latensi.
from concurrent.futures import ThreadPoolExecutor, as_completed
def process_url(url):
session = "".join(random.choices(string.ascii_lowercase, k=8))
proxy = get_oxylabs_sticky_proxy(session, country="us")
try:
resp = requests.get(url, proxies=proxy, timeout=30)
import re
match = re.search(r'data-sitekey="([^"]+)"', resp.text)
if match:
token = solve_recaptcha(url, match.group(1))
return {"url": url, "status": "solved"}
return {"url": url, "status": "no_captcha"}
except Exception as e:
return {"url": url, "status": "error", "error": str(e)}
urls = ["https://site1.com", "https://site2.com", "https://site3.com"]
with ThreadPoolExecutor(max_workers=5) as executor:
futures = {executor.submit(process_url, u): u for u in urls}
for future in as_completed(futures):
print(future.result())
Saat menargetkan data publik, pastikan Anda hanya memproses data yang berhak Anda olah — UU Pelindungan Data Pribadi (UU 27/2022) menjadikan ini praktik yang wajar dijaga, bukan sekadar formalitas.
Tips: setel
max_workerstidak melebihi jumlah thread paket CaptchaAI Anda. Worker berlebih hanya akan antre menunggu thread kosong, bukan mempercepat solve.
Mengatasi masalah umum
| Masalah | Penyebab | Solusi |
|---|---|---|
| 403 dari proxy | IP masuk daftar hitam | Beralih ke IP residensial atau rotasi IP |
| Autentikasi gagal | endpoint salah | Datacenter: dc.pr.oxylabs.io:10000, Residensial: pr.oxylabs.io:7777 |
| Sticky session berakhir | Standarnya 10 menit | Buat ID sesi baru |
| CAPTCHA di setiap halaman | IP datacenter dikenali | Beralih ke IP residensial |
| Respons lambat | Latensi jaringan residensial | Terima apa adanya atau pindah ke proxy ISP |
Pertanyaan umum
Apakah saya masih perlu proxy jika sudah memakai CaptchaAI?
Ya, keduanya berbeda peran. CaptchaAI menyelesaikan tantangan CAPTCHA, tetapi tidak menentukan dari IP mana request Anda keluar. Proxy Oxylabs menjaga IP tetap bersih dan tersebar; CaptchaAI menangani CAPTCHA yang tetap muncul.
Bagaimana cara menekan 403 dan CAPTCHA yang berulang saat scraping?
Mulai dari IP residensial untuk target sensitif, pakai sticky session agar satu alur memakai satu IP, dan lakukan rotasi IP setelah beberapa request. Biarkan CaptchaAI menuntaskan tantangan yang tetap lolos, jadi Anda tidak perlu mengejar rasio nol CAPTCHA.
Berapa thread CaptchaAI yang saya butuhkan untuk scraping paralel?
Samakan jumlah thread dengan konkurensi target Anda: satu CAPTCHA yang sedang diproses menempati satu thread. Paket BASIC ($15/bulan, 5 thread) cukup untuk uji coba, sedangkan ADVANCE ($90/bulan, 50 thread) atau PREMIUM ($170/bulan, 100 thread) cocok untuk pipeline paralel yang padat. Semua paket berbasis thread dengan solve tanpa batas per thread.
Apakah CaptchaAI menyelesaikan reCAPTCHA v2 dan Turnstile di alur proxy ini?
Ya. Contoh di atas memakai reCAPTCHA v2, tetapi CaptchaAI juga menyelesaikan Cloudflare Turnstile, reCAPTCHA v3, GeeTest v3, serta CAPTCHA gambar/OCR — semuanya lewat request yang sama, terlepas dari proxy yang Anda pakai.
Panduan terkait
- Integrasi Bright Data + CaptchaAI
- Setup Smartproxy + CaptchaAI
- Proxy ISP vs proxy pusat data untuk CAPTCHA
Padukan infrastruktur proxy Oxylabs dengan penyelesaian CAPTCHA dari CaptchaAI — ambil API key Anda.