Apify adalah platform cloud scraping yang menjalankan aktor Crawlee. Berikut cara menambahkan penyelesaian CaptchaAI CAPTCHA ke aktor Apify Anda.
Pengaturan Aktor
Skema Masukan
{
"title": "CAPTCHA Scraper Input",
"type": "object",
"properties": {
"startUrls": {
"title": "Start URLs",
"type": "array",
"editor": "requestListSources"
},
"captchaaiApiKey": {
"title": "CaptchaAI API Key",
"type": "string",
"isSecret": true
},
"maxConcurrency": {
"title": "Max Concurrency",
"type": "integer",
"default": 3
}
},
"required": ["startUrls", "captchaaiApiKey"]
}
Kode Aktor
const { Actor } = require('apify');
const { PlaywrightCrawler } = require('crawlee');
Actor.main(async () => {
const input = await Actor.getInput();
const { startUrls, captchaaiApiKey, maxConcurrency = 3 } = input;
const solver = new CaptchaAISolver(captchaaiApiKey);
const crawler = new PlaywrightCrawler({
maxConcurrency,
requestHandlerTimeoutSecs: 180,
async requestHandler({ request, page, log }) {
await page.goto(request.url, { waitUntil: 'networkidle' });
// Check for CAPTCHA
const sitekey = await page.evaluate(() => {
const el = document.querySelector('[data-sitekey]');
return el ? el.getAttribute('data-sitekey') : null;
});
if (sitekey) {
log.info(`Solving CAPTCHA on ${request.url}`);
const token = await solver.solve(sitekey, request.url);
// Inject and submit
await page.evaluate((t) => {
document.querySelector('[name="g-recaptcha-response"]').value = t;
const cb = document.querySelector('.g-recaptcha')?.getAttribute('data-callback');
if (cb && window[cb]) window[cb](t);
}, token);
await page.click('button[type="submit"]');
await page.waitForNavigation({ timeout: 15000 });
}
// Extract data
const title = await page.title();
const items = await page.$$eval('.item', els =>
els.map(el => ({
name: el.querySelector('.name')?.textContent?.trim(),
price: el.querySelector('.price')?.textContent?.trim(),
url: el.querySelector('a')?.href,
}))
);
// Push to Apify dataset
await Actor.pushData({
url: request.url,
title,
items,
scrapedAt: new Date().toISOString(),
});
log.info(`Scraped ${items.length} items from ${request.url}`);
},
});
await crawler.run(startUrls);
});
class CaptchaAISolver {
constructor(apiKey) {
this.apiKey = apiKey;
}
async solve(sitekey, pageurl) {
const params = new URLSearchParams({
key: this.apiKey,
method: 'userrecaptcha',
googlekey: sitekey,
pageurl: pageurl,
json: '1',
});
const submitResp = await fetch('https://ocr.captchaai.com/in.php', {
method: 'POST',
body: params,
});
const submitResult = await submitResp.json();
if (submitResult.status !== 1) {
throw new Error(`Submit: ${submitResult.request}`);
}
const taskId = submitResult.request;
await new Promise(r => setTimeout(r, 15000));
for (let i = 0; i < 24; i++) {
const pollResp = await fetch(
`https://ocr.captchaai.com/res.php?key=${this.apiKey}&action=get&id=${taskId}&json=1`
);
const result = await pollResp.json();
if (result.status === 1) return result.request;
if (result.request !== 'CAPCHA_NOT_READY') {
throw new Error(`Solve: ${result.request}`);
}
await new Promise(r => setTimeout(r, 5000));
}
throw new Error('Timeout');
}
}
Variabel Lingkungan di Apify
Simpan kunci CaptchaAI Anda dengan aman:
- Buka Pengaturan aktor -> Variabel lingkungan
- Tambahkan:
CAPTCHAAI_API_KEY= kunci Anda (tandai sebagai rahasia) - Akses dalam kode:
process.env.CAPTCHAAI_API_KEY
// Alternative: use env var instead of input
const apiKey = input.captchaaiApiKey || process.env.CAPTCHAAI_API_KEY;
Proxy Apify + CaptchaAI
const crawler = new PlaywrightCrawler({
proxyConfiguration: await Actor.createProxyConfiguration({
groups: ['RESIDENTIAL'],
}),
// ... rest of config
});
Pertanyaan Umum
Bisakah saya menggunakan CaptchaAI di tingkat gratis Apify?
Ya. CaptchaAI adalah panggilan API eksternal yang berfungsi pada paket Apify apa pun. Biaya Anda adalah harga paket berbasis thread CaptchaAI (penyelesaian tanpa batas per thread) ditambah biaya komputasi Apify.
Haruskah saya menggunakan proxy Apify atau parameter proxy CaptchaAI?
Gunakan proxy Apify untuk permintaan scraping dan CaptchaAI tanpa proxy untuk penyelesaian. Ini adalah pendekatan paling hemat biaya untuk sebagian besar kasus penggunaan.
Bagaimana cara menangani batas waktu aktor Apify dengan penyelesaian CAPTCHA?
Setel requestHandlerTimeoutSecs ke setidaknya 180 detik untuk memberikan waktu penyelesaian CAPTCHA.
Panduan Terkait
- Integrasi Perayapan + CaptchaAI
- Membangun Framework Scraping Kustom
Terapkan aktor pemecah CAPTCHA — dapatkan CaptchaAI.