कैप्चा समाधान
reCaptcha
Scrapeless क्रॉलर ब्राउज़र केवल आपकी सहायता reCaptchaV2 को स्वचालित रूप से हल करने में करता है; बाद की संचालन को आपको स्वयं लागू करना होगा।
Cloudflare
- Cloudflare Turnstile
- Cloudflare Challenge
Scrapeless क्रॉलर ब्राउज़र केवल आपकी सहायता Turnstile या Challenge को स्वचालित रूप से हल करने में करता है; बाद की संचालन को आपको स्वयं लागू करना होगा। Cloudflare चुनौतियों को संभालने पर विस्तृत अभ्यास (जिसमें
cf_clearanceप्राप्त करना शामिल है) के लिए, कृपया देखें: https://www.scrapeless.com/en/blog/cloudflare-challenge-bypass
समाधान उदाहरण
जब हम लक्ष्य साइट तक पहुँचने के लिए ब्राउज़र से कनेक्ट होते हैं, तो Scrapeless स्वचालित रूप से CAPTCHA को हल कर देगा। हालाँकि, हमें यह सुनिश्चित करना होगा कि CAPTCHA सफलतापूर्वक हल हो गया है। यह एक सरल उदाहरण है: यह उदाहरण लक्ष्य साइट तक पहुँचता है और Captcha.solveFinished CDP घटना को सुनकर यह पुष्टि करता है कि CAPTCHA सफलतापूर्वक हल हो गया है। अंत में, यह सत्यापन के लिए पृष्ठ का एक स्क्रीनशॉट लेगा।
इस उदाहरण में दो मुख्य विधियाँ परिभाषित की गई हैं:
addCaptchaListener: ब्राउज़र सत्र में CAPTCHA घटनाओं को सुनने के लिए उपयोग किया जाता हैonCaptchaFinished: CAPTCHA समाधान पूरा होने की प्रतीक्षा करने के लिए उपयोग किया जाता है
समर्थित CAPTCHA सूची
- reCaptcha v2
- Cloudflare Turnstile
- Cloudflare 5 सेकंड चुनौती
- AWS Challenge
import puppeteer from "puppeteer-core";
import EventEmitter from 'events';
const emitter = new EventEmitter()
const scrapelessUrl = 'wss://browser.scrapeless.com/api/v2/browser?token=your_api_key&sessionTTL=180&proxyCountry=ANY';
export async function example(url) {
const browser = await puppeteer.connect({
browserWSEndpoint: scrapelessUrl,
defaultViewport: null
});
console.log("Verbonden met Scrapeless browser");
try {
const page = await browser.newPage();
// Listen for captcha events
console.debug("addCaptchaListener: Start listening for captcha events");
await addCaptchaListener(page);
console.log("Navigated to URL:", url);
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 30000 });
console.log("onCaptchaFinished: Waiting for captcha solving to finish...");
await onCaptchaFinished()
// Screenshot for debugging
console.debug("Taking screenshot of the final page...");
await page.screenshot({ path: 'screenshot.png', fullPage: true });
} catch (error) {
console.error(error);
} finally {
await browser.close();
console.log("Browser closed");
}
}
async function addCaptchaListener(page) {
const client = await page.createCDPSession();
client.on("Captcha.detected", (msg) => {
console.debug("Captcha.detected: ", msg);
});
client.on("Captcha.solveFinished", async (msg) => {
console.debug("Captcha.solveFinished: ", msg);
emitter.emit("Captcha.solveFinished", msg);
client.removeAllListeners()
});
}
async function onCaptchaFinished(timeout = 60_000) {
return Promise.race([
new Promise((resolve) => {
emitter.on("Captcha.solveFinished", (msg) => {
resolve(msg);
});
}),
new Promise((_, reject) => setTimeout(() => reject('Timeout'), timeout))
])
}reCaptcha उदाहरण
स्वचालित reCaptcha समाधान को सत्यापित करने के लिए उदाहरण कोड विधि को कॉल करें।
example('https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox-explicit.php');Cloudflare Turnstile उदाहरण
स्वचालित Cloudflare Turnstile समाधान को सत्यापित करने के लिए उदाहरण कोड विधि को कॉल करें।
example('https://www.scrapingcourse.com/login/cf-turnstile');सफलतापूर्वक Cloudflare Turnstile के समाधान की पुष्टि केवल Captcha.solveFinished CDP घटना को सुनकर ही नहीं, बल्कि window.turnstile.getResponse() को सुनकर भी की जा सकती है। यह एक पूर्ण उदाहरण है:
import puppeteer from "puppeteer-core";
const scrapelessUrl = 'wss://browser.scrapeless.com/api/v2/browser?token=your_api_key&sessionTTL=180&proxyCountry=ANY';
export async function turnstileExample(url) {
const browser = await puppeteer.connect({
browserWSEndpoint: scrapelessUrl,
defaultViewport: null
});
console.log("Verbonden met Scrapeless browser");
try {
const page = await browser.newPage();
console.log("Navigated to URL:", url);
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 30000 });
console.log("onCaptchaFinished: Waiting for captcha solving to finish...");
await waitTurnstile(page)
// Screenshot for debugging
console.debug("Taking screenshot of the final page...");
await page.screenshot({ path: 'screenshot.png', fullPage: true });
} catch (error) {
console.error(error);
} finally {
await browser.close();
console.log("Browser closed");
}
}
async function waitTurnstile(page) {
await page.waitForFunction(() => {
return window.turnstile && window.turnstile.getResponse();
});
const token = await page.evaluate(() => {
return window.turnstile.getResponse();
});
console.log("Cloudflare Turnstile token:", token);
}
turnstileExample('https://www.scrapingcourse.com/login/cf-turnstile');Cloudflare चुनौती उदाहरण
Cloudflare चुनौती विशेष है क्योंकि कभी-कभी यह Cloudflare चुनौती ट्रिगर नहीं करेगी, और CDP घटनाओं को सुनकर सफल समाधान की पुष्टि करने की विधि समय समाप्ति तक पहुँच सकती है। इसलिए, समाधान के बाद पृष्ठ पर तत्वों के दिखाई देने की प्रतीक्षा करना एक अधिक स्थिर विधि है। यह एक पूर्ण उदाहरण है:
import puppeteer from "puppeteer-core";
const scrapelessUrl = 'wss://browser.scrapeless.com/api/v2/browser?token=your_api_key&sessionTTL=180&proxyCountry=ANY';
export async function challengeExample(url) {
const browser = await puppeteer.connect({
browserWSEndpoint: scrapelessUrl,
defaultViewport: null
});
console.log("Verbonden met Scrapeless browser");
try {
const page = await browser.newPage();
console.log("Navigated to URL:", url);
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 30000 });
console.log("onCaptchaFinished: Waiting for captcha solving to finish...");
await waitChallenge(page, 'main.page-content .challenge-info')
// Screenshot for debugging
console.debug("Taking screenshot of the final page...");
await page.screenshot({ path: 'screenshot.png', fullPage: true });
} catch (error) {
console.error(error);
} finally {
await browser.close();
console.log("Browser closed");
}
}
async function waitChallenge(page, selector) {
await page.waitForSelector(selector);
console.log("Cloudflare Challenge completed");
}
challengeExample('https://www.scrapingcourse.com/cloudflare-challenge');