कैप्चा को क्रॉली में कैपसॉल्वर इंटीग्रेशन के साथ हल करें

Rajinder Singh
Deep Learning Researcher
24-Dec-2025
TL;DR: क्रैली क्रैलर अक्सर कैप्चा बाधाओं का सामना करते हैं। कैपसॉल्वर के साथ एकीकरण करने से आप reCAPTCHA, टर्नस्टाइल, और अधिक को हल कर सकते हैं, ताकि छापने के कार्यवाही स्थिर रहे और स्वचालित रहे।

क्रैली के साथ क्रैलर बनाते समय, कैप्चा के सामना करना लगभग अनिवार्य है— विशेष रूप से आधुनिक साइटों पर जो बॉट सुरक्षा के लिए अत्यधिक बाधा डालते हैं। भले ही बेहतर तरीके से सेट अप किए गए प्लेयराइट या HTTP क्रैलर हों, अभी भी जब reCAPTCHA, Turnstile, या समान चुनौतियाँ दिखाई देती हैं, तो ब्लॉक कर दिया जा सकता है।
इस गाइड एक व्यावहारिक दृष्टिकोण पर केंद्रित है: कैपसॉल्वर का उपयोग करके कैप्चा चुनौतियों को क्रैली कार्यवाही में सीधे हल करें। ब्राउज़र फिंगरप्रिंट के साथ अंतहीन लड़ाई लड़े बिना, आप देखेंगे कि आम बैक्स चुनौतियों की पहचान कैसे करें, उन्हें प्रोग्रामेटिक रूप से हल करें, और वास्तविक छापने के स्थिति में अपने क्रैलर को विश्वसनीय रूप से चलाएं।
क्रैली क्या है?
Crawlee एक वेब छापने और ब्राउज़र ऑटोमेशन लाइब्रेरी है जो नोड.जे.एस के लिए डिज़ाइन किया गया है, जो आधुनिक बॉट सुरक्षा के नीचे छिपे एक मानव-जैसा विश्वसनीय क्रैलर बनाने के लिए बनाया गया है। टाइपस्क्रिप्ट के साथ बनाया गया, यह उच्च-स्तरीय सरलता और निम्न-स्तरीय कस्टमाइज़ेशन प्रदान करता है।
क्रैली के मुख्य लक्षण
- एकीकृत इंटरफेस: HTTP और हेडलेस ब्राउज़र क्रैलिंग के लिए एक ही API
- बॉट बचाव: ब्राउज़र फिंगरप्रिंट बनाना, टीएलएस फिंगरप्रिंट की प्रतिलिपि बनाना, और मानव-जैसा व्यवहार
- स्मार्ट वर्ग प्रबंधन: ब्रैड्थ-फर्स्ट और डीप्थ-फर्स्ट क्रैलिंग विकल्प के साथ स्थायी URL वर्ग
- स्वचालित स्केलिंग: सिस्टम लोड के आधार पर स्वचालित संसाधन स्केलिंग
- प्रॉक्सी रोटेशन: बिल्ट-इन प्रॉक्सी रोटेशन और सेशन प्रबंधन
- कई ब्राउज़र समर्थन: क्रोम, फायरफॉक्स और वेबकिट के साथ प्लेयराइट और पुप्पेटीयर के साथ काम करता है
क्रैलर प्रकार
क्रैली विभिन्न उपयोग मामलों के लिए विभिन्न क्रैलर प्रकार प्रदान करता है:
| क्रैलर प्रकार | विवरण |
|---|---|
| CheerioCrawler | चीरियो के लिए HTML पार्सिंग के साथ अत्यधिक तेज HTTP क्रैलर |
| PlaywrightCrawler | JavaScript-भारी साइटों के लिए प्लेयराइट के साथ पूर्ण ब्राउज़र ऑटोमेशन |
| PuppeteerCrawler | JavaScript रेंडरिंग के लिए पुप्पेटीयर के साथ पूर्ण ब्राउज़र ऑटोमेशन |
| JSDOMCrawler | ब्राउज़र के बिना JavaScript निष्पादन के लिए JSDOM के साथ HTTP क्रैलर |
कैपसॉल्वर क्या है?
CapSolver एक अग्रणी कैप्चा हल करने वाली सेवा है जो विभिन्न कैप्चा चुनौतियों के बाहर निकलने के लिए AI-संचालित समाधान प्रदान करता है। बहुत सारे कैप्चा प्रकारों के समर्थन और तेज उत्तर समय के साथ, कैपसॉल्वर अपने ऑटोमेटेड कार्यवाही में बिना बाधा के एकीकृत हो जाता है।
समर्थित कैप्चा प्रकार
- reCAPTCHA v2 (चित्र और अदृश्य)
- reCAPTCHA v3
- Cloudflare Turnstile
- AWS WAF
- और बहुत कुछ...
कैपसॉल्वर के साथ क्रैली के एकीकरण के कारण
सुरक्षित वेबसाइटों के साथ बातचीत करने वाले क्रैली क्रैलर बनाते समय, कैप्चा चुनौतियाँ आपके पूरे छापने पाइपलाइन को रोक सकती हैं। यहां एकीकरण के महत्व के कारण हैं:
- अवरोध रहित क्रैलिंग: बिना हस्तक्षेप के क्रैलर डेटा निकालते रहते हैं
- स्केलेबल ऑपरेशन: समानांतर क्रैलिंग सत्रों में बहुत सारे कैप्चा चुनौतियाँ संभालें
- लागत-कुशल: केवल सफल रूप से हल किए गए कैप्चा के लिए भुगतान करें
- उच्च सफलता दर: समर्थित सभी कैप्चा प्रकार के लिए उद्योग-नेता सटीकता
स्थापना
सबसे पहले, आवश्यक पैकेज स्थापित करें:
bash
npm install crawlee playwright axios
या yarn के साथ:
bash
yarn add crawlee playwright axios
क्रैली के लिए कैपसॉल्वर उपयोगिता बनाएं
यहां आपके क्रैली परियोजनाओं में उपयोग किए जा सकने वाले एक पुन: उपयोग करने योग्य कैपसॉल्वर उपयोगिता वर्ग है:
बुनियादी कैपसॉल्वर सेवा
typescript
import axios from 'axios';
const CAPSOLVER_API_KEY = 'अपना CAPSOLVER API KEY';
interface TaskResult {
status: string;
solution?: {
gRecaptchaResponse?: string;
token?: string;
};
errorDescription?: string;
}
class CapSolverService {
private apiKey: string;
private baseUrl = 'https://api.capsolver.com';
constructor(apiKey: string = CAPSOLVER_API_KEY) {
this.apiKey = apiKey;
}
async createTask(taskData: object): Promise<string> {
const response = await axios.post(`${this.baseUrl}/createTask`, {
clientKey: this.apiKey,
task: taskData
});
if (response.data.errorId !== 0) {
throw new Error(`कैपसॉल्वर त्रुटि: ${response.data.errorDescription}`);
}
return response.data.taskId;
}
async getTaskResult(taskId: string, maxAttempts = 60): Promise<TaskResult> {
for (let i = 0; i < maxAttempts; i++) {
await this.sleep(2000);
const response = await axios.post(`${this.baseUrl}/getTaskResult`, {
clientKey: this.apiKey,
taskId
});
if (response.data.status === 'ready') {
return response.data;
}
if (response.data.status === 'failed') {
throw new Error(`कार्य विफल: ${response.data.errorDescription}`);
}
}
throw new Error('कैप्चा समाधान के लिए प्रतीक्षा के बाद समय सीमा समाप्त हो गई');
}
private sleep(ms: number): Promise<void> {
return new Promise(resolve => setTimeout(resolve, ms));
}
async solveReCaptchaV2(websiteUrl: string, websiteKey: string): Promise<string> {
const taskId = await this.createTask({
type: 'ReCaptchaV2TaskProxyLess',
websiteURL: websiteUrl,
websiteKey
});
const result = await this.getTaskResult(taskId);
return result.solution?.gRecaptchaResponse || '';
}
async solveReCaptchaV3(
websiteUrl: string,
websiteKey: string,
pageAction = 'submit'
): Promise<string> {
const taskId = await this.createTask({
type: 'ReCaptchaV3TaskProxyLess',
websiteURL: websiteUrl,
websiteKey,
pageAction
});
const result = await this.getTaskResult(taskId);
return result.solution?.gRecaptchaResponse || '';
}
async solveTurnstile(websiteUrl: string, websiteKey: string): Promise<string> {
const taskId = await this.createTask({
type: 'AntiTurnstileTaskProxyLess',
websiteURL: websiteUrl,
websiteKey
});
const result = await this.getTaskResult(taskId);
return result.solution?.token || '';
}
}
export const capSolver = new CapSolverService();
क्रैली के साथ विभिन्न कैप्चा प्रकार हल करें
PlaywrightCrawler के साथ reCAPTCHA v2
typescript
import { PlaywrightCrawler, Dataset } from 'crawlee';
import { capSolver } from './capsolver-service';
const RECAPTCHA_SITE_KEY = 'अपना साइट की';
const crawler = new PlaywrightCrawler({
async requestHandler({ page, request, log }) {
log.info(`प्रक्रिया कर रहे हैं ${request.url}`);
// जांचें कि पृष्ठ में reCAPTCHA है या नहीं
const hasRecaptcha = await page.$('.g-recaptcha');
if (hasRecaptcha) {
log.info('reCAPTCHA पाया गया, हल कर रहे हैं...');
// पृष्ठ से साइट की प्राप्त करें
const siteKey = await page.$eval(
'.g-recaptcha',
(el) => el.getAttribute('data-sitekey')
) || RECAPTCHA_SITE_KEY;
// कैप्चा हल करें
const token = await capSolver.solveReCaptchaV2(request.url, siteKey);
// टोकन डालें - टेक्स्ट एरिया छिपा हुआ है, इसलिए जावास्क्रिप्ट का उपयोग करें
await page.$eval('#g-recaptcha-response', (el: HTMLTextAreaElement, token: string) => {
el.style.display = 'block';
el.value = token;
}, token);
// फॉर्म भेजें
await page.click('button[type="submit"]');
await page.waitForLoadState('networkidle');
log.info('reCAPTCHA सफलतापूर्वक हल कर दिया गया!');
}
// कैप्चा हल होने के बाद डेटा निकालें
const title = await page.title();
const content = await page.locator('body').innerText();
await Dataset.pushData({
title,
content: content.slice(0, 1000)
});
},
maxRequestsPerCrawl: 50,
headless: true
});
await crawler.run(['https://example.com/protected-page']);
PlaywrightCrawler के साथ reCAPTCHA v3
typescript
import { PlaywrightCrawler, Dataset } from 'crawlee';
import { capSolver } from './capsolver-service';
const crawler = new PlaywrightCrawler({
async requestHandler({ page, request, log }) {
log.info(`प्रक्रिया कर रहे हैं ${request.url}`);
// reCAPTCHA v3 अदृश्य है, इसलिए स्क्रिप्ट द्वारा पहचानें
const recaptchaScript = await page.$('script[src*="recaptcha/api.js?render="]');
if (recaptchaScript) {
log.info('reCAPTCHA v3 पाया गया, हल कर रहे हैं...');
// स्क्रिप्ट स्रोत से साइट की निकालें
const scriptSrc = await recaptchaScript.getAttribute('src') || '';
const siteKeyMatch = scriptSrc.match(/render=([^&]+)/);
const siteKey = siteKeyMatch ? siteKeyMatch[1] : '';
if (siteKey) {
// reCAPTCHA v3 हल करें
const token = await capSolver.solveReCaptchaV3(
request.url,
siteKey,
'submit'
);
// जावास्क्रिप्ट का उपयोग करके छिपे इनपुट में टोकन डालें
await page.$eval('input[name="g-recaptcha-response"]', (el: HTMLInputElement, token: string) => {
el.value = token;
}, token);
log.info('reCAPTCHA v3 टोकन डाल दिया गया!');
}
}
// फॉर्म जमा करने या डेटा निकालने के बाद जारी रखें
const title = await page.title();
const url = page.url();
await Dataset.pushData({ title, url });
}
});
await crawler.run(['https://example.com/v3-protected']);
PlaywrightCrawler के साथ Cloudflare Turnstile
typescript
import { PlaywrightCrawler, Dataset } from 'crawlee';
import { capSolver } from './capsolver-service';
const crawler = new PlaywrightCrawler({
async requestHandler({ page, request, log }) {
log.info(`प्रक्रिया कर रहे हैं ${request.url}`);
// Turnstile विजेट की जांच करें
const hasTurnstile = await page.$('.cf-turnstile');
if (hasTurnstile) {
log.info('Cloudflare Turnstile पाया गया, हल कर रहे हैं...');
// साइट की प्राप्त करें
const siteKey = await page.$eval(
'.cf-turnstile',
(el) => el.getAttribute('data-sitekey')
);
if (siteKey) {
// Turnstile हल करें
const token = await capSolver.solveTurnstile(request.url, siteKey);
// जावास्क्रिप्ट का उपयोग करके टोकन डालें (छिपा इनपुट)
await page.$eval('input[name="cf-turnstile-response"]', (el: HTMLInputElement, token: string) => {
el.value = token;
}, token);
// फॉर्म भेजें
await page.click('button[type="submit"]');
await page.waitForLoadState('networkidle');
log.info('Turnstile सफलतापूर्वक हल कर दिया गया!');
}
}
// डेटा निकालें
const title = await page.title();
const content = await page.locator('body').innerText();
await Dataset.pushData({
title,
content: content.slice(0, 500)
});
}
});
await crawler.run(['https://example.com/turnstile-protected']);
उन्नत एकीकरण: कैप्चा प्रकार के स्वचालित निर्धारण
यहां एक उन्नत क्रैलर है जो विभिन्न कैप्चा प्रकार की स्वचालित रूप से पहचान और हल करता है:
typescript
import { PlaywrightCrawler, Dataset } from 'crawlee';
import { capSolver } from './capsolver-service';
interface CaptchaInfo {
type: 'recaptcha-v2' | 'recaptcha-v3' | 'turnstile' | 'none';
siteKey: string | null;
}
async function detectCaptcha(page: any): Promise<CaptchaInfo> {
// reCAPTCHA v2 की जांच करें
const recaptchaV2 = await page.$('.g-recaptcha');
if (recaptchaV2) {
const siteKey = await page.$eval('.g-recaptcha', (el: Element) =>
el.getAttribute('data-sitekey')
);
return { type: 'recaptcha-v2', siteKey };
}
// reCAPTCHA v3 की जांच करें
const recaptchaV3Script = await page.$('script[src*="recaptcha/api.js?render="]');
if (recaptchaV3Script) {
const scriptSrc = await recaptchaV3Script.getAttribute('src') || '';
const match = scriptSrc.match(/render=([^&]+)/);
const siteKey = match ? match[1] : null;
return { type: 'recaptcha-v3', siteKey };
}
// Turnstile की जांच करें
const turnstile = await page.$('.cf-turnstile');
if (turnstile) {
const siteKey = await page.$eval('.cf-turnstile', (el: Element) =>
el.getAttribute('data-sitekey')
);
return { type: 'turnstile', siteKey };
}
return { type: 'none', siteKey: null };
}
async function solveCaptcha(
page: any,
url: string,
captchaInfo: CaptchaInfo
): Promise<void> {
if (!captchaInfo.siteKey || captchaInfo.type === 'none') return;
let token: string;
switch (captchaInfo.type) {
case 'recaptcha-v2':
token = await capSolver.solveReCaptchaV2(url, captchaInfo.siteKey);
// छिपा टेक्स्ट एरिया - जावास्क्रिप्ट का उपयोग करके मान डालें
await page.$eval('#g-recaptcha-response', (el: HTMLTextAreaElement, t: string) => {
el.style.display = 'block';
el.value = t;
}, token);
break;
case 'recaptcha-v3':
token = await capSolver.solveReCaptchaV3(url, captchaInfo.siteKey);
// छिपा इनपुट - जावास्क्रिप्ट का उपयोग करके मान डालें
await page.$eval('input[name="g-recaptcha-response"]', (el: HTMLInputElement, t: string) => {
el.value = t;
}, token);
break;
case 'turnstile':
token = await capSolver.solveTurnstile(url, captchaInfo.siteKey);
// छिपा इनपुट - जावास्क्रिप्ट का उपयोग करके मान डालें
await page.$eval('input[name="cf-turnstile-response"]', (el: HTMLInputElement, t: string) => {
el.value = t;
}, token);
break;
}
}
const crawler = new PlaywrightCrawler({
async requestHandler({ page, request, log, enqueueLinks }) {
log.info(`प्रक्रिया कर रहे हैं ${request.url}`);
// कैप्चा का स्वचालित निर्धारण
const captchaInfo = await detectCaptcha(page);
if (captchaInfo.type !== 'none') {
log.info(`${captchaInfo.type} पाया गया, हल कर रहे हैं...`);
await solveCaptcha(page, request.url, captchaInfo);
// यदि फॉर्म मौजूद है तो फॉर्म भेजें
const submitBtn = await page.$('button[type="submit"], input[type="submit"]');
if (submitBtn) {
कैपसॉल्वर के साथ क्रैली के एकीकरण कैसे करें
यहां कैपसॉल्वर के साथ क्रैली के एकीकरण के लिए एक उदाहरण है:
```typescript
import { PlaywrightCrawler, Dataset } from 'crawlee';
import { capSolver } from './capsolver-service';
const crawler = new PlaywrightCrawler({
launchContext: {
launchOptions: {
// ब्राउज़र एक्सटेंशन लोड करें
args: [
`--disable-extensions-except=${path.resolve('./capsolver-extension')}`,
`--load-extension=${path.resolve('./capsolver-extension')}`
],
headless: false // एक्सटेंशन के लिए हेडलेस मोड आवश्यक नहीं है
}
},
async requestHandler({ page, request, log, enqueueLinks }) {
log.info(`प्रोसेसिंग ${request.url}`);
// यहां आप कैपचा हल करने के लिए अपने कोड को जोड़ सकते हैं
// अगर कैपचा हल हो गया है तो इसकी प्रतीक्षा करें
const submitBtn = await page.$('button[type="submit"]');
if (submitBtn) {
await submitBtn.click();
await page.waitForLoadState('networkidle');
}
log.info('कैपचा सफलतापूर्वक हल हो गया!');
},
// डेटा निकालें
const title = await page.title();
const url = page.url();
const text = await page.locator('body').innerText();
await Dataset.pushData({
title,
url,
text: text.slice(0, 1000)
});
// आगे के ब्राउज़िंग के लिए जारी रखें
await enqueueLinks();
},
maxRequestsPerCrawl: 100
});
await crawler.run(['https://example.com']);
कैपचा टोकन कैसे जमा करें
प्रत्येक कैपचा प्रकार के ब्राउज़र संदर्भ में अलग-अलग जमा करने की विधि की आवश्यकता होती है:
reCAPTCHA v2/v3 - टोकन इंजेक्शन
typescript
async function submitRecaptchaToken(page: any, token: string): Promise<void> {
// उत्तर टेक्स्ट क्षेत्र छिपा हुआ है - जावास्क्रिप्ट का उपयोग करके मान निर्धारित करें
await page.$eval('#g-recaptcha-response', (el: HTMLTextAreaElement, token: string) => {
el.style.display = 'block';
el.value = token;
}, token);
// अगर विशेष अनुप्रयोगों में छिपा इनपुट मौजूद है तो इसे भी सेट करें
try {
await page.$eval('input[name="g-recaptcha-response"]', (el: HTMLInputElement, token: string) => {
el.value = token;
}, token);
} catch (e) {
// इनपुट मौजूद नहीं हो सकता है
}
// फॉर्म जमा करें
await page.click('form button[type="submit"]');
}
Turnstile - टोकन इंजेक्शन
typescript
async function submitTurnstileToken(page: any, token: string): Promise<void> {
// जावास्क्रिप्ट का उपयोग करके छिपा इनपुट में टोकन सेट करें
await page.$eval('input[name="cf-turnstile-response"]', (el: HTMLInputElement, token: string) => {
el.value = token;
}, token);
// फॉर्म जमा करें
await page.click('form button[type="submit"]');
}
कैपसॉल्वर ब्राउज़र एक्सटेंशन का उपयोग करके क्रैली के साथ
कैपचा समाधान के लिए स्वचालित विधि के लिए, आप कैपसॉल्वर ब्राउज़र एक्सटेंशन लोड कर सकते हैं:
typescript
import { PlaywrightCrawler } from 'crawlee';
import path from 'path';
const crawler = new PlaywrightCrawler({
launchContext: {
launchOptions: {
// कैपसॉल्वर एक्सटेंशन लोड करें
args: [
`--disable-extensions-except=${path.resolve('./capsolver-extension')}`,
`--load-extension=${path.resolve('./capsolver-extension')}`
],
headless: false // एक्सटेंशन के लिए हेडलेस मोड आवश्यक है
}
},
async requestHandler({ page, request, log }) {
log.info(`प्रसंस्करण ${request.url}`);
// एक्सटेंशन कैपचा स्वचालित रूप से हल करेगा
// संभावित कैपचा हल होने के लिए प्रतीक्षा करें
await page.waitForTimeout(5000);
// आगे डेटा निकालें
const title = await page.title();
const content = await page.locator('body').innerText();
console.log({ title, content });
}
});
await crawler.run(['https://example.com/captcha-page']);
शीर्ष व्यवहार
1. पुन: प्रयास के साथ त्रुटि प्रबंधन
typescript
async function solveWithRetry(
solverFn: () => Promise<string>,
maxRetries = 3
): Promise<string> {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await solverFn();
} catch (error) {
if (attempt === maxRetries - 1) throw error;
const delay = Math.pow(2, attempt) * 1000; // एक्स्पोनेंशियल बैकऑफ
await new Promise(resolve => setTimeout(resolve, delay));
}
}
throw new Error('अधिकतम पुन: प्रयास समाप्त');
}
// उपयोग
const token = await solveWithRetry(() =>
capSolver.solveReCaptchaV2(url, siteKey)
);
2. बैलेंस प्रबंधन
typescript
import axios from 'axios';
async function checkBalance(apiKey: string): Promise<number> {
const response = await axios.post('https://api.capsolver.com/getBalance', {
clientKey: apiKey
});
return response.data.balance || 0;
}
// क्रैलर शुरू करने से पहले जांचें
const balance = await checkBalance(CAPSOLVER_API_KEY);
if (balance < 1) {
console.warn('कैपसॉल्वर बैलेंस कम है! कृपया भरें।');
}
3. बहुत सारे पृष्ठों के लिए सत्र प्रबंधन
typescript
import { PlaywrightCrawler, Dataset } from 'crawlee';
import { capSolver } from './capsolver-service';
// एक ही डोमेन/कुंजी संयोजन के लिए हल किए गए टोकन कैश करें
const tokenCache = new Map<string, { token: string; timestamp: number }>();
const TOKEN_TTL = 90000; // 90 सेकंड
async function getCachedToken(
url: string,
siteKey: string,
solverFn: () => Promise<string>
): Promise<string> {
const cacheKey = `${new URL(url).hostname}:${siteKey}`;
const cached = tokenCache.get(cacheKey);
if (cached && Date.now() - cached.timestamp < TOKEN_TTL) {
return cached.token;
}
const token = await solverFn();
tokenCache.set(cacheKey, { token, timestamp: Date.now() });
return token;
}
4. प्रॉक्सी एकीकरण
typescript
import { PlaywrightCrawler, ProxyConfiguration } from 'crawlee';
const proxyConfiguration = new ProxyConfiguration({
proxyUrls: [
'http://user:[email protected]:8080',
'http://user:[email protected]:8080',
'http://user:[email protected]:8080'
]
});
const crawler = new PlaywrightCrawler({
proxyConfiguration,
async requestHandler({ page, request, log, proxyInfo }) {
log.info(`प्रॉक्सी का उपयोग कर रहे हैं: ${proxyInfo?.url}`);
// आपके कैपचा समाधान और डेटा निकालने के लिए अपना कोड यहां रखें
}
});
पूर्ण उदाहरण: कैपचा समाधान के साथ ई-कॉमर्स स्क्रैपर
typescript
import { PlaywrightCrawler, Dataset, ProxyConfiguration } from 'crawlee';
import { capSolver } from './capsolver-service';
interface Product {
name: string;
price: string;
url: string;
image: string;
}
const proxyConfiguration = new ProxyConfiguration({
proxyUrls: ['http://user:[email protected]:8080']
});
const crawler = new PlaywrightCrawler({
proxyConfiguration,
maxRequestsPerCrawl: 200,
maxConcurrency: 5,
async requestHandler({ page, request, log, enqueueLinks }) {
log.info(`स्क्रैपिंग: ${request.url}`);
// क्या कैपचा मौजूद है?
const hasRecaptcha = await page.$('.g-recaptcha');
const hasTurnstile = await page.$('.cf-turnstile');
if (hasRecaptcha) {
const siteKey = await page.$eval(
'.g-recaptcha',
(el) => el.getAttribute('data-sitekey')
);
if (siteKey) {
log.info('रीकैपचा हल कर रहे हैं...');
const token = await capSolver.solveReCaptchaV2(request.url, siteKey);
// जावास्क्रिप्ट का उपयोग करके टोकन इंजेक्ट करें (छिपा तत्व)
await page.$eval('#g-recaptcha-response', (el: HTMLTextAreaElement, t: string) => {
el.style.display = 'block';
el.value = t;
}, token);
await page.click('button[type="submit"]');
await page.waitForLoadState('networkidle');
}
}
if (hasTurnstile) {
const siteKey = await page.$eval(
'.cf-turnstile',
(el) => el.getAttribute('data-sitekey')
);
if (siteKey) {
log.info('टर्नस्टाइल हल कर रहे हैं...');
const token = await capSolver.solveTurnstile(request.url, siteKey);
// जावास्क्रिप्ट का उपयोग करके टोकन इंजेक्ट करें (छिपा तत्व)
await page.$eval('input[name="cf-turnstile-response"]', (el: HTMLInputElement, t: string) => {
el.value = t;
}, token);
await page.click('button[type="submit"]');
await page.waitForLoadState('networkidle');
}
}
// प्लेयराइट लोकेटर का उपयोग करके उत्पाद डेटा निकालें
const productCards = await page.locator('.product-card').all();
const products: Product[] = [];
for (const card of productCards) {
products.push({
name: await card.locator('.product-name').innerText().catch(() => ''),
price: await card.locator('.product-price').innerText().catch(() => ''),
url: await card.locator('a').getAttribute('href') || '',
image: await card.locator('img').getAttribute('src') || ''
});
}
if (products.length > 0) {
await Dataset.pushData(products);
log.info(`निकाले गए ${products.length} उत्पाद`);
}
// पृष्ठांत और श्रेणी लिंक एनक्यू करें
await enqueueLinks({
globs: ['**/products/**', '**/page/**', '**/category/**']
});
},
failedRequestHandler({ request, log }) {
log.error(`अनुरोध विफल: ${request.url}`);
}
});
// स्क्रैपिंग शुरू करें
await crawler.run(['https://example-store.com/products']);
// परिणाम निर्यात करें
const dataset = await Dataset.open();
await dataset.exportToCSV('products.csv');
console.log('स्क्रैपिंग पूर्ण! परिणाम products.csv में संग्रहीत किए गए हैं');
निष्कर्ष
कैपसॉल्वर के साथ क्रैली के एकीकरण नोड.जे.एस विकासकर्ताओं के लिए वेब स्क्रैपिंग की पूर्ण क्षमता को खोलता है। क्रैली के विश्वसनीय स्क्रैपिंग बुनियादी ढांचे के साथ कैपसॉल्वर के अंतर्निहित उद्योग-नेता कैपचा समाधान क्षमता के साथ आप अधिक चुनौतीपूर्ण बॉट सुरक्षा तकनीकों के साथ विश्वसनीय स्क्रैपर बना सकते हैं।
क्या आप डेटा निकालने के पाइपलाइन, मूल्य निगरानी प्रणाली या सामग्री एग्रीगेशन टूल बना रहे हैं, क्रैली + कैपसॉल्वर संयोजन उत्पादन परिदृश्यों के लिए आवश्यक विश्वसनीयता और विस्तार के साथ आता है।
शुरू करने के लिए तैयार हैं? कैपसॉल्वर के लिए पंजीकरण करें और अपने पहले भुगतान पर CRAWLEE कोड के साथ 6% का अतिरिक्त बोनस प्राप्त करें!
अक्सर पूछे जाने वाले प्रश्न
क्रैली क्या है?
क्रैली एक वेब स्क्रैपिंग और ब्राउज़र ऑटोमेशन लाइब्रेरी है जो नोड.जे.एस के लिए बनाई गई है। यह जावास्क्रिप्ट-भारित साइटों के लिए ब्राउज़र ऑटोमेशन के साथ-साथ एचटीटीपी-आधारित स्क्रैपिंग के लिए उपयोग करता है। इसमें एंटी-बॉट स्टील्थ और प्रॉक्सी घूर्णन जैसी बिल्ट-इन विशेषताएं हैं।
कैपसॉल्वर क्रैली के साथ कैसे एकीकृत है?
कैपसॉल्वर क्रैली के साथ एक सेवा वर्ग के माध्यम से एकीकृत है जो कैपसॉल्वर API को घेरता है। अपने क्रैलर के अनुरोध हैंडलर में, आप कैपचा चुनौतियों का पता लगा सकते हैं और कैपसॉल्वर का उपयोग करके इन्हें हल कर सकते हैं, फिर टोकन को पृष्ठ में वापस इंजेक्ट कर सकते हैं।
कैपसॉल्वर कौन-से कैपचा हल कर सकता है?
कैपसॉल्वर रीकैपचा v2, रीकैपचा v3, क्लाउडफ़ायर टर्नस्टाइल, एमजेडी वीएफ, जीटेस्ट आदि जैसे विस्तृत कैपचा प्रकारों के समाधान के लिए समर्थन प्रदान करता है।
कैपसॉल्वर की कीमत क्या है?
कैपसॉल्वर कैपचा हल करने के प्रकार और आउटपुट के आधार पर प्रतिस्पर्धी मूल्य निर्धारित करता है। capsolver.com पर वर्तमान मूल्य विवरण के लिए जाएं। CRAWLEE कोड के साथ अपने पहले भुगतान पर 6% का अतिरिक्त बोनस प्राप्त करें।
क्या मैं अन्य नोड.जे.एस फ्रेमवर्क के साथ कैपसॉल्वर का उपयोग कर सकता हूं?
हां! कैपसॉल्वर एक आरएसटी एपीआई प्रदान करता है जिसे किसी भी नोड.जे.एस फ्रेमवर्क, जैसे एक्सप्रेस, पुप्पेटीयर स्टैंडअलोन, सेलेनियम आदि के साथ एकीकृत किया जा सकता है।
क्या क्रैली मुक्त रूप से उपयोग करने योग्य है?
हां, क्रैली ओपन-सोर्स है और एपैच 2.0 लाइसेंस के तहत जारी किया गया है। फ्रेमवर्क मुक्त रूप से उपयोग करने योग्य है, हालांकि आप कैपचा समाधान सेवाओं जैसे कैपसॉल्वर के लिए लागत वहन कर सकते हैं।
कैपचा साइट कुंजी कैसे ढूंढें?
साइट कुंजी आमतौर पर पृष्ठ के HTML स्रोत में पाई जाती है। खोजें:
- रीकैपचा:
.g-recaptchaतत्व परdata-sitekeyलक्षण - टर्नस्टाइल:
.cf-turnstileतत्व परdata-sitekeyलक्षण - या नेटवर्क अनुरोधों में की अपी कॉल में जांचें
कौन सा क्रैली क्रैलर प्रकार चुनें?
- CheerioCrawler: जावास्क्रिप्ट के बिना तेज़, सरल HTML स्क्रैपिंग के लिए सबसे अच्छा
- PlaywrightCrawler: जावास्क्रिप्ट-भारित साइटों और कैपचा समाधान के लिए (कैपसॉल्वर एकीकरण के लिए सुझाए गए)
- PuppeteerCrawler: प्लेयराइट के समान क्षमता के साथ विकल्प
- JSDOMCrawler: जावास्क्रिप्ट के साथ बुनियादी समर्थन के साथ अच्छा मध्यवर्ती विकल्प
अनुपालन अस्वीकरण: इस ब्लॉग पर प्रदान की गई जानकारी केवल सूचनात्मक उद्देश्यों के लिए है। CapSolver सभी लागू कानूनों और विनियमों का पालन करने के लिए प्रतिबद्ध है। CapSolver नेटवर्क का उपयोग अवैध, धोखाधड़ी या दुरुपयोग करने वाली गतिविधियों के लिए करना सख्त वर्जित है और इसकी जांच की जाएगी। हमारे कैप्चा समाधान उपयोगकर्ता अनुभव को बेहतर बनाने के साथ-साथ सार्वजनिक डेटा क्रॉलिंग के दौरान कैप्चा कठिनाइयों को हल करने में 100% अनुपालन सुनिश्चित करते हैं। हम अपनी सेवाओं के जिम्मेदार उपयोग की प्रोत्साहना करते हैं। अधिक जानकारी के लिए, कृपया हमारी सेवा की शर्तें और गोपनीयता नीति पर जाएं।
अधिक

सर्वश्रेष्ठ प्रॉक्सी कंपनी की सेवाएं आपको जानना चाहिए
यह ब्लॉग पांच प्रमुख प्रॉक्सी सेवा प्रदाताओं: ProxyScrape.com, Proxies.gg, Asocks.com, MetaProxies, RushProxy और Ake.net के बारे में गहरा अवलोकन प्रदान करता है। प्रत्येक खंड विशेष सेवाओं, विशेषताओं, मूल्य निर्धारण और लाभ के अद्वितीय प्रस्तावों पर गहराई से चर्चा करता है, उनके बल और विशेषताओं को बेझिझक उजागर करता है। रिजिडेंशियल और मोबाइल प्रॉक्सी से लेकर डेटा सेंटर विकल्पों तक, ब्लॉग विविध प्रॉक्सी लैंडस्केप के एक व्यापक अवलोकन प्रदान करता है। क्या आप बाजार विश्लेषण उपकरण की तलाश में व्यवसाय हैं, ऑनलाइन गोपनीयता की तलाश में व्यक्तिगत उपयोगकर्ता हैं, या वेब स्क्रैपिंग समाधान की आवश्यकता वाले विकासकर्ता हैं, यह ब्लॉग आपकी आवश्यकताओं के अनुरूप उचित प्रॉक्सी सेवा के चयन के लिए एक मूल्यवान निर्देशक है।

Emma Foster
24-Dec-2025

कैप्चा को क्रॉली में कैपसॉल्वर इंटीग्रेशन के साथ हल करें
Crawlee में reCAPTCHA और Turnstile के हल करने के लिए एक व्यावहारिक गाइड, CapSolver के उपयोग से स्थिर Node.js छापामारी के लिए।

Rajinder Singh
24-Dec-2025

CrewAI में CapSolver एकीकरण के साथ कैप्चा हल करें
क्रूएआई के कैपसॉल्वर के साथ एकीकरण reCAPTCHA, Cloudflare Turnstile, AWS WAF आदि के लिए बिना रुकावट के CAPTCHA प्रबंधन की सुविधा प्रदान करता है, जो स्वचालित वेब कार्यों को सुधारता है।

Rajinder Singh
23-Dec-2025

2026 में वेब स्क्रैपिंग के लिए सर्वश्रेष्ठ कोडिंग भाषा
चयन करना सही कोडिंग भाषा वेब स्क्रैपिंग के लिए महत्वपूर्ण है। 2026 में प्रदर्शन और स्केल के लिए पायथन, गो, जावास्क्रिप्ट और अधिक की तुलना करें। साथ ही, जानें कि कैपसॉल्वर सफलता सुनिश्चित कैसे करता है।

Rajinder Singh
19-Dec-2025

कैमूफॉक्स को कैपसॉल्वर के साथ एकीकृत करने के लिए कैपचा हल करें
कैमूफॉक्स के साथ कैपसॉल्वर के संयोजन के बारे में जानें ताकि आप बड़े पैमाने पर क्लाउडफ़ेयर टर्नस्टाइल और रीकैपचा को बर्बाद कर सकें।

Ethan Collins
16-Dec-2025

Sample Post
सीखें बोटासॉरस (पायथन वेब स्क्रैपिंग फ्रेमवर्क) के साथ कैपसॉल्वर API को एकीकृत करें ताकि reCAPTCHA v2/v3 और Turnstile स्वचालित रूप से हल किए जा सकें।

Rajinder Singh
15-Dec-2025


