Octoparse berhenti mengekstrak begitu sebuah reCAPTCHA muncul di halaman target — dan karena alatnya berbasis visual tanpa kode, tidak ada tempat untuk menempelkan solver. Jalan keluarnya sederhana: selesaikan CAPTCHA di luar Octoparse memakai satu skrip Python kecil dengan CaptchaAI, ekspor cookie sesi yang sudah tervalidasi, lalu impor cookie itu ke task Octoparse Anda. Panduan ini menunjukkan dua pola integrasi yang bisa langsung dipakai.
Kenapa CAPTCHA menghentikan task Octoparse
Octoparse unggul untuk pekerjaan scraping visual: Anda menunjuk elemen di layar dan alat merakit alur ekstraksi tanpa satu baris kode. Kelemahannya muncul ketika situs target memasang CAPTCHA — Octoparse tidak punya cara bawaan yang andal untuk menyelesaikannya, sehingga task berhenti atau mengembalikan halaman kosong.
| Skenario | Apa yang terjadi |
|---|---|
| reCAPTCHA di halaman target | Ekstraksi berhenti, perlu penyelesaian manual |
| Cloudflare Challenge | Halaman termuat tetapi tidak ada data yang terekstrak |
| CAPTCHA akibat rate limiting | Setelah N halaman, tantangan CAPTCHA muncul |
| Data di balik login | Formulir login memuat CAPTCHA sebelum sesi terbentuk |
CaptchaAI menyelesaikan reCAPTCHA v2 dan v3, Cloudflare Turnstile, Cloudflare Challenge, GeeTest v3, serta CAPTCHA gambar/OCR — semua tipe yang paling sering menghentikan scraper Octoparse.
Dua pola integrasi
Karena Octoparse tidak mengekspos titik untuk memanggil API solver, kedua pola di bawah menjalankan penyelesaian CAPTCHA di sisi Python, lalu menyerahkan hasilnya kembali ke Octoparse:
- Validasi awal + injeksi cookie — cocok untuk data di balik login. Anda login sekali via skrip, lalu Octoparse memakai cookie sesinya.
- Ekstraksi berbasis API — cocok untuk banyak halaman ber-CAPTCHA. Skrip menyelesaikan CAPTCHA per URL dan mengambil datanya langsung.
Pola 1: validasi awal + injeksi cookie
Pola ini menyelesaikan CAPTCHA di halaman login satu kali, lalu mengekspor cookie terautentikasi ke format yang bisa diimpor Octoparse. Alurnya mengikuti empat langkah standar CaptchaAI: kirim task ke in.php, simpan task ID, polling res.php sampai token siap, lalu pakai token pada form login.
import requests
import time
import json
class OctoparseCaptchaHelper:
"""Solve CAPTCHAs and export cookies for Octoparse."""
def __init__(self, api_key):
self.api_key = api_key
self.session = requests.Session()
def solve_and_get_cookies(self, login_url, sitekey, credentials):
"""
Solve login CAPTCHA and return session cookies.
Steps:
1. Visit login page to get initial cookies
2. Solve CAPTCHA via CaptchaAI
3. Submit login form with token
4. Export authenticated cookies
"""
# Step 1: Get initial cookies
self.session.get(login_url, timeout=15)
# Step 2: Solve CAPTCHA
token = self._solve_recaptcha(sitekey, login_url)
# Step 3: Submit login
login_data = {
**credentials,
"g-recaptcha-response": token,
}
resp = self.session.post(login_url, data=login_data, timeout=30)
if resp.status_code != 200:
raise RuntimeError(f"Login failed: {resp.status_code}")
# Step 4: Export cookies
cookies = []
for cookie in self.session.cookies:
cookies.append({
"name": cookie.name,
"value": cookie.value,
"domain": cookie.domain,
"path": cookie.path,
})
return cookies
def export_cookies_for_octoparse(self, cookies, output_file="cookies.json"):
"""Save cookies in format importable by Octoparse."""
with open(output_file, "w") as f:
json.dump(cookies, f, indent=2)
print(f"Cookies saved to {output_file}")
print(f"Import these in Octoparse: Task → Advanced Settings → Cookies")
def _solve_recaptcha(self, sitekey, pageurl):
"""Solve reCAPTCHA via CaptchaAI."""
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": self.api_key,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1,
}, timeout=30)
result = resp.json()
if result.get("status") != 1:
raise RuntimeError(f"Submit error: {result.get('request')}")
task_id = result["request"]
time.sleep(15)
for _ in range(24):
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": self.api_key, "action": "get",
"id": task_id, "json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
return data["request"]
if data["request"] != "CAPCHA_NOT_READY":
raise RuntimeError(data["request"])
time.sleep(5)
raise TimeoutError("Solve timeout")
# Usage
helper = OctoparseCaptchaHelper("YOUR_API_KEY")
cookies = helper.solve_and_get_cookies(
login_url="https://staging.example.com/qa-login",
sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
credentials={"username": "user", "password": "pass"},
)
helper.export_cookies_for_octoparse(cookies)
Hasilnya adalah cookies.json yang tinggal Anda muat lewat Task → Advanced Settings → Cookies di Octoparse. Selama cookie sesi masih berlaku, task berjalan tanpa menyentuh halaman login lagi.
Pola 2: ekstraksi berbasis API
Bila data yang Anda butuhkan tersebar di banyak halaman yang masing-masing dilindungi CAPTCHA, injeksi cookie saja tidak cukup. Di sini skrip Python menyelesaikan CAPTCHA per URL dan mengambil datanya langsung, memberi Anda kontrol penuh atas retry dan jeda antar-permintaan:
def extract_with_captcha(api_key, urls, sitekey):
"""Extract data from CAPTCHA-protected pages."""
results = []
for url in urls:
print(f"Processing: {url}")
# Solve CAPTCHA for this page
helper = OctoparseCaptchaHelper(api_key)
token = helper._solve_recaptcha(sitekey, url)
# Access page with token
resp = requests.post(url, data={
"g-recaptcha-response": token,
}, timeout=30)
# Parse response
if resp.status_code == 200:
results.append({
"url": url,
"content_length": len(resp.text),
"status": "success",
})
else:
results.append({
"url": url,
"status": f"failed ({resp.status_code})",
})
time.sleep(3) # Rate limit
return results
Perhatikan time.sleep(3) di akhir loop: jeda antar-permintaan menahan laju agar situs target tidak memicu lebih banyak CAPTCHA. Untuk beban besar, tambahkan percobaan ulang dengan jeda yang meningkat eksponensial (exponential backoff) alih-alih menyerah pada error pertama.
Konfigurasi Octoparse yang penting
Beberapa pengaturan menentukan apakah cookie hasil validasi benar-benar terpakai saat task berjalan:
| Pengaturan | Rekomendasi |
|---|---|
| Tunggu pemuatan halaman | Setel 10+ detik untuk halaman ber-CAPTCHA |
| Retry saat error | Aktifkan, 3 kali percobaan |
| Impor cookie | Pakai cookie hasil ekspor dari helper |
| Ekstraksi cloud | Jalankan cloud Octoparse dengan cookie yang sudah divalidasi |
| Ekstraksi lokal | Pakai mode lokal untuk validasi CAPTCHA awal |
Menjaga cookie tetap segar dan biaya tetap terkendali
Cookie sesi punya masa berlaku. Untuk task terjadwal — misalnya price monitoring harian yang jamak dikerjakan tim data dan freelancer scraping di Indonesia — jalankan helper Python lewat cron atau Task Scheduler agar cookie disegarkan sesaat sebelum setiap run Octoparse. Bila Anda deploy di cloud, region seperti AWS ap-southeast-1 (Singapura) atau ap-southeast-3 (Jakarta) menekan latensi ke banyak situs lokal.
Soal biaya, model CaptchaAI berbasis thread, bukan per solve: satu thread adalah satu CAPTCHA yang sedang diproses, dan setiap paket memberi solve tak terbatas per thread selama sebulan. Paket BASIC mulai $15/bulan dengan 5 threads — cukup untuk sebagian besar task Octoparse tunggal, dan bisa dinaikkan saat Anda menjalankan banyak ekstraksi paralel. Terakhir, scraping data di balik login menyentuh UU Pelindungan Data Pribadi (UU 27/2022): ambil hanya data yang berhak Anda proses dan hindari data pribadi orang lain.
Pertanyaan umum
Tipe CAPTCHA apa saja yang bisa ditangani lewat pola ini?
Helper di atas dicontohkan dengan reCAPTCHA v2, tetapi metode yang sama berlaku untuk reCAPTCHA v3, Cloudflare Turnstile, Cloudflare Challenge, dan GeeTest v3 — cukup ganti parameter method dan sitekey sesuai tipe target. hCaptcha dan FunCaptcha belum didukung, jadi untuk keduanya Anda memerlukan layanan lain.
Berapa biaya CaptchaAI untuk beban scraping seperti ini?
Penagihan per thread, bukan per solve, jadi biaya bulanan tetap berapa pun jumlah CAPTCHA yang diselesaikan. Paket BASIC $15/bulan (5 threads) menutupi task Octoparse skala kecil; naikkan ke paket dengan lebih banyak thread saat menjalankan banyak ekstraksi bersamaan. Harga terbaru ada di halaman pricing CaptchaAI.
Kenapa data tetap kosong padahal cookie sudah diimpor?
Biasanya cookie sudah kedaluwarsa atau domain/path-nya tidak cocok dengan URL yang di-scrape. Jalankan ulang helper untuk membuat cookie segar, pastikan field domain sama persis dengan situs target, dan naikkan waktu tunggu pemuatan halaman agar konten sempat muncul sebelum ekstraksi dimulai.
Kapan sebaiknya beralih dari Octoparse ke skrip penuh?
Selama CAPTCHA jarang muncul, injeksi cookie ke Octoparse sudah cukup. Begitu hampir setiap halaman meminta CAPTCHA atau Anda butuh logika retry yang rumit, Pola 2 berbasis API memberi kontrol dan keandalan yang lebih baik daripada alur visual.
Panduan terkait
- Integrasi ParseHub + CaptchaAI untuk scraping tanpa kode
- Membangun framework scraping sendiri dengan CaptchaAI
Tangani CAPTCHA dalam visual scraping — coba CaptchaAI.