Git Product home page Git Product logo

puppeteer-extra-plugin-capsolver's Introduction

puppeteer-extra-plugin-capsolver

  • Manage to solve captcha challenges with AI (captcha service based).
  • Puppeteer browser context.
  • ❗ An API key it's required. Get here.

⬇️ Install

npm i puppeteer puppeteer-extra puppeteer-extra-plugin-capsolver

✋ Usage

Import and use within puppeteer-extra.

const puppeteer = require('puppeteer-extra')
const CapSolverPlugin = require('puppeteer-extra-plugin-capsolver')({
    apiKey: 'CAI-XXX ...',
    verboseLevel: 1,
    retry: true         // hcaptchaclicker: by default will retry challenges 
})
puppeteer.use(CapSolverPlugin)

🖱 HCaptcha (DOM feature)

  • await page.hcaptchaclicker(checkboxFrame=undefined) - handle a page including hcaptcha checkbox iframe example script (how to use).

  • Will detect for failed callenges (and retry) and for double challenges that sometimes appears.

  • Catch .hcaptchaclicker() exceptions for unsupported challenges.

  • Read more about recognize captcha images through HCaptcha Image Classification.

// get custom hcatpcha checkbox iframe
const desiredCheckboxFrame = await page.$("iframe[src*='custom-link-for-iframe-selector']")

await page.hcaptchaclicker(desiredCheckboxFrame) // pass no frame for detect the first on the page
.then(async (page) => {
    // submit if passed the challenge
    await page.click('#submit-my-form')
    await page.waitForNavigation()
}).catch((e) => {
    // ! catch clicker exception
    console.log(e)
})

📖 Handler / Solving Tasks API Wrapper

  • Based on capsolver-npm (nodejs api wrapper for capsolver.com api).

  • Handler it's attached to any puppeteer page.

  • Use the handler with:

await page.capsolver()

example: retrieve handler and call for funcaptcha token.

await page.capsolver()
    .funcaptchaproxyless(websiteURL, websitePublicKey, funcaptchaApiJSSubdomain) // see required parametes by https://github.com/0qwertyy/capsolver-npm#-supported-captcha-tasks
    .then((results) => {
        if (results.error !== 0) {
            // createTask solution
            const token = results.solution
        } else {
            console.log(`got an error! ${JSON.stringify(results.apiResponse)}`)
        }
    }).catch(e => {
        console.log(e)
    })
  • Note that await page.capsolver().runAnyTask({}) it's also supported in the case of tasks that are not supported by task-bind methods. see: examples/run-any-task-example.js

📁 Working Examples

figure out at examples directory

puppeteer-extra-plugin-capsolver's People

Contributors

0qwertyy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

puppeteer-extra-plugin-capsolver's Issues

Error: Node is either not clickable or not an HTMLElement

code

const puppeteer = require('puppeteer-extra');
const { executablePath } = require('puppeteer');
const CapSolverPlugin = require('puppeteer-extra-plugin-capsolver')(); // ! Initialize once with ()

puppeteer.use(CapSolverPlugin);
CapSolverPlugin.setHandler('xxx');

/** MAIN / SCRIPT  */

let targeturl = 'https://accounts.hcaptcha.com/demo';

puppeteer.launch({
    headless: false, executablePath: executablePath(),
})
.then(async browser => {
    await browser.createIncognitoBrowserContext();
    let page = await browser.newPage();
    await page.goto(targeturl);
    console.log('[myapp][navigate][' + targeturl + ']');
    await page.waitForTimeout(6000);

    //
    // build your own script here ...
    //

    // ! executes clicker
    console.log('[myapp][executing HCaptcha clicker over page: '+JSON.stringify(page)+']');
    await CapSolverPlugin.hcaptchaclicker(page)
    .then(async (page) => {
        // submit if passed captcha
        await page.click('#hcaptcha-demo-submit');
        await page.waitForNavigation();
    }).catch((e) => {
        // print clicker error
        console.log(e);
    });

})

response

myapp][navigate][https://accounts.hcaptcha.com/demo]
[myapp][executing HCaptcha clicker over page: {"eventsMap":{},"emitter":{"all":{}}}]
Error: Node is either not clickable or not an HTMLElement
    at CDPElementHandle.clickablePoint (/Users/coln/www/127/tech/ai/mj/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ElementHandle.js:192:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async CDPElementHandle.click (/Users/coln/www/127/tech/ai/mj/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ElementHandle.js:244:26)
    at async IsolatedWorld.click (/Users/coln/www/127/tech/ai/mj/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/common/IsolatedWorld.js:185:9)
    at async solve (/Users/coln/www/127/tech/ai/mj/node_modules/.pnpm/[email protected]/node_modules/puppeteer-extra-plugin-capsolver/src/index.js:72:13)
    at async CapSolverPlugin.hcaptchaclicker (/Users/coln/www/127/tech/ai/mj/node_modules/.pnpm/[email protected]/node_modules/puppeteer-extra-plugin-capsolver/src/index.js:119:17)
    at async /Users/coln/www/127/tech/ai/mj/test/test2.js:28:5
HCaptcha inaccessible.

Cannot read properties of undefined (reading 'forEach')

await page.capsolver().runAnyTask({
type: 'ReCaptchaV2TaskProxyLess',
websiteURL: 'https://2captcha.com/demo/recaptcha-v2',
websiteKey: '6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u',
}).then(async (results) => {
console.log(JSON.stringify(results))
}).catch(e => {
console.log(e)
})

    TypeError: Cannot read properties of undefined (reading 'forEach')
at Tasker.validate (C:\Users\gkurn\Desktop\NODE_JS\Scrape-Brightdata\node_modules\capsolver-npm\src\Tasker.js:92:44)
at Tasker.createTask (C:\Users\gkurn\Desktop\NODE_JS\Scrape-Brightdata\node_modules\capsolver-npm\src\Tasker.js:32:14)
at CapSolver.runAnyTask (C:\Users\gkurn\Desktop\NODE_JS\Scrape-Brightdata\node_modules\capsolver-npm\src\CapSolver.js:64:39)
at main (C:\Users\gkurn\Desktop\NODE_JS\Scrape-Brightdata\capsolver.js:148:32)

PS C:\Users\gkurn\Desktop\NODE_JS\Scrape-Brightdata>

cause: Error: write EPROTO 140537671436224:error:1408F10B:SSL routines:ssl3_get_record:wrong version

code

const { DISCORD_U, DISCORD_P, CAP } = require('../../../config/key/chat.json')
const puppeteer = require('puppeteer-extra')
const { executablePath } = require('puppeteer')
const CapSolverPlugin = require('puppeteer-extra-plugin-capsolver')({
    apiKey: CAP,
    verboseLevel: 1,
    retry: false    // works for .hcaptchaclicker()
})

puppeteer.use(CapSolverPlugin)


/** MAIN / SCRIPT  */
let targeturl = 'https://accounts.hcaptcha.com/demo'

puppeteer.launch({
    executablePath: executablePath(),
    args: ['--no-sandbox'],
})
.then(async browser => {
    await browser.createIncognitoBrowserContext()
    let page = await browser.newPage()

    console.log(`[myapp][navigating][${targeturl}]`)
    await page.goto(targeturl)

    await page.waitForTimeout(2000)
    const captchaCheckboxFrames = await page.$$('iframe[title*="containing checkbox for hCaptcha"]')
    console.log(`[myapp][found ${captchaCheckboxFrames.length} hcaptcha frames]`)

    // search for the first hcaptcha frame
    await page.hcaptchaclicker().catch(e => { console.log(e) })

    console.log(`[myapp][finished]`)
})

response

cause: Error: write EPROTO 140537671436224:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:ssl/record/ssl3_record.c:332:
  
      at WriteWrap.onWriteComplete [as oncomplete] (node:internal/stream_base_commons:94:16) {
    errno: -71,
    code: 'EPROTO',
    syscall: 'write'
  }

version
[email protected]

capsolver API invalid task: {"errorCode":"ERROR_INVALID_TASK_DATA","errorDescription":"question empty","errorId":1} HCaptcha inaccessible.

  1. my code
const puppeteer = require('puppeteer-extra');
const { executablePath } = require('puppeteer');
const CapSolverPlugin = require('puppeteer-extra-plugin-capsolver')();; // ! Initialize once with ()

puppeteer.use(CapSolverPlugin);
CapSolverPlugin.setHandler('xxx');

/** MAIN / SCRIPT  */

let targeturl = 'https://democaptcha.com/demo-form-eng/hcaptcha.html';

puppeteer.launch({
    args: ["--no-sandbox"],
    executablePath: executablePath(), 
})
.then(async browser => {
    await browser.createIncognitoBrowserContext();
    let page = await browser.newPage();
    await page.goto(targeturl);
    console.log('[myapp][navigate][' + targeturl + ']');

    //
    // build your own script here ...
    //

    // ! executes clicker
    console.log('[myapp][executing HCaptcha clicker over page: '+JSON.stringify(page)+']');
    await page.screenshot({
      path: './out.png'
    });
    await CapSolverPlugin.hcaptchaclicker(page)
    .then(async (page) => {
        await page.screenshot({
          path: './out1.png'
        });
        // submit if passed captcha
        await page.click('#hcaptcha-demo-submit');
        await page.waitForNavigation();
        await page.screenshot({
          path: './out2.png'
        });
    }).catch((e) => {
        // print clicker error
        console.log(e);
    });

})
  1. response
[myapp][navigate][https://democaptcha.com/demo-form-eng/hcaptcha.html]
[myapp][executing HCaptcha clicker over page: {"eventsMap":{},"emitter":{"all":{}}}]
capsolver API invalid task: {"errorCode":"ERROR_INVALID_TASK_DATA","errorDescription":"question empty","errorId":1}
HCaptcha inaccessible.

Does it support Playwright?

I would like to try it with my project but it's using Playwright. According to puppeteer-extra docs:

New plugins will be based off automation-extra-plugin, which supports both Playwright & Puppeteer events

So I am wondering if this plugin is compatible with Playwright?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.