UNPKG

puppeteer-real-browser

Version:

This package is designed to bypass puppeteer's bot-detecting captchas such as Cloudflare. It acts like a real browser and can be managed with puppeteer.

123 lines (109 loc) 5.21 kB
import test from 'node:test'; import assert from 'node:assert'; import { connect } from '../../lib/esm/index.mjs'; const realBrowserOption = { args: ["--start-maximized"], turnstile: true, headless: false, // disableXvfb: true, // ignoreAllFlags:true, customConfig: {}, connectOption: { defaultViewport: null }, plugins: [] } // test('Puppeteer Extra Plugin', async () => { // /* // Run with: // npm i puppeteer-extra-plugin-click-and-wait // */ // const clickAndWait = await (await import('puppeteer-extra-plugin-click-and-wait')).default // realBrowserOption.plugins = [ // clickAndWait() // ] // const { page, browser } = await connect(realBrowserOption) // await page.goto("https://google.com", { waitUntil: "domcontentloaded" }) // await page.clickAndWaitForNavigation('body') // await browser.close() // }) test('DrissionPage Detector', async () => { const { page, browser } = await connect(realBrowserOption) await page.goto("https://web.archive.org/web/20240913054632/https://drissionpage.pages.dev/"); await page.realClick("#detector") let result = await page.evaluate(() => { return document.querySelector('#isBot span').textContent.includes("not") ? true : false }) await browser.close() assert.strictEqual(result, true, "DrissionPage Detector test failed!") }) test('Brotector, a webdriver detector', async () => { const { page, browser } = await connect(realBrowserOption) await page.goto("https://kaliiiiiiiiii.github.io/brotector/"); await new Promise(r => setTimeout(r, 3000)); let result = await page.evaluate(() => { return document.querySelector('#table-keys').getAttribute('bgcolor') }) await browser.close() assert.strictEqual(result === "darkgreen", true, "Brotector, a webdriver detector test failed!") }) test('Cloudflare WAF', async () => { const { page, browser } = await connect(realBrowserOption) await page.goto("https://nopecha.com/demo/cloudflare"); let verify = null let startDate = Date.now() while (!verify && (Date.now() - startDate) < 30000) { verify = await page.evaluate(() => { return document.querySelector('.link_row') ? true : null }).catch(() => null) await new Promise(r => setTimeout(r, 1000)); } await browser.close() assert.strictEqual(verify === true, true, "Cloudflare WAF test failed!") }) test('Cloudflare Turnstile', async () => { const { page, browser } = await connect(realBrowserOption) await page.goto("https://turnstile.zeroclover.io/"); await page.waitForSelector('[type="submit"]') let token = null let startDate = Date.now() while (!token && (Date.now() - startDate) < 30000) { token = await page.evaluate(() => { try { let item = document.querySelector('[name="cf-turnstile-response"]').value return item && item.length > 20 ? item : null } catch (e) { return null } }) await new Promise(r => setTimeout(r, 1000)); } await browser.close() // if (token !== null) console.log('Cloudflare Turnstile Token: ' + token); assert.strictEqual(token !== null, true, "Cloudflare turnstile test failed!") }) test('Fingerprint JS Bot Detector', async () => { const { page, browser } = await connect(realBrowserOption) await page.goto("https://fingerprint.com/products/bot-detection/"); await new Promise(r => setTimeout(r, 5000)); const detect = await page.evaluate(() => { return document.querySelector('.HeroSection-module--botSubTitle--2711e').textContent.includes("not") ? true : false }) await browser.close() assert.strictEqual(detect, true, "Fingerprint JS Bot Detector test failed!") }) // If you fail this test, your ip address probably has a high spam score. Please use a mobile or clean ip address. test('Datadome Bot Detector', async (t) => { const { page, browser } = await connect(realBrowserOption) await page.goto("https://antoinevastel.com/bots/datadome"); const check = await page.waitForSelector('nav #navbarCollapse').catch(() => null) await browser.close() assert.strictEqual(check ? true : false, true, "Datadome Bot Detector test failed! [This may also be because your ip address has a high spam score. Please try with a clean ip address.]") }) // If this test fails, please first check if you can access https://antcpt.com/score_detector/ test('Recaptcha V3 Score (hard)', async () => { const { page, browser } = await connect(realBrowserOption) await page.goto("https://antcpt.com/score_detector/"); await page.realClick("button") await new Promise(r => setTimeout(r, 5000)); const score = await page.evaluate(() => { return document.querySelector('big').textContent.replace(/[^0-9.]/g, '') }) await browser.close() // if (Number(score) >= 0.7) console.log('Recaptcha V3 Score: ' + score); assert.strictEqual(Number(score) >= 0.7, true, "(please first check if you can access https://antcpt.com/score_detector/.) Recaptcha V3 Score (hard) should be >=0.7. Score Result: " + score) })