समर्थित CAPTCHAs
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 5s Challenge
- AWS Challenge
import puppeteer from "puppeteer-core";
import EventEmitter from 'events';
const emitter = new EventEmitter()
const scrapelessUrl = 'wss://browser.scrapeless.com/browser?token=your_api_key&session_ttl=180&proxy_country=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/browser?token=your_api_key&session_ttl=180&proxy_country=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 Challenge उदाहरण
Cloudflare Challenge विशेष है क्योंकि कभी-कभी यह Cloudflare Challenge को ट्रिगर नहीं करेगा, और CDP ईवेंट सुनकर सफल समाधान की पुष्टि करने की विधि समय समाप्त हो जाएगी। इसलिए, समाधान के बाद पृष्ठ पर तत्वों की उपस्थिति की प्रतीक्षा करना एक अधिक स्थिर विधि है। यह एक पूर्ण उदाहरण है:
import puppeteer from "puppeteer-core";
const scrapelessUrl = 'wss://browser.scrapeless.com/browser?token=your_api_key&session_ttl=180&proxy_country=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');