Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for anti-Captcha.com #29

Open
2 of 6 tasks
xfouloux opened this issue Dec 14, 2020 · 10 comments
Open
2 of 6 tasks

Support for anti-Captcha.com #29

xfouloux opened this issue Dec 14, 2020 · 10 comments
Labels
captcha solver service enhancement New feature or request help wanted Extra attention is needed

Comments

@xfouloux
Copy link
Collaborator

xfouloux commented Dec 14, 2020

Basic Stuff

  • Implement methods that don't use proxy until Add support for proxy #26 solved

  • Manage APIKey

  • hcaptcha cloudflare tests

  • googlecaptcha tests

  • microsoft funcaptcha tests

Better Stuff

  • Could be great if we could send it via the request, so it could be set on the program doing the request
    Might be not doable until something else is done on Flaresolverr to manage this

Documentation

Refs

Task of #24

Forking to https://github.com/xfouloux/FlareSolverr branch feature/anticaptcha

@ngosang ngosang added captcha solver service enhancement New feature or request help wanted Extra attention is needed labels Dec 14, 2020
@xfouloux
Copy link
Collaborator Author

So trying via jackett like this

docker network create --attachable torrent

docker run -d \
  --name jackett \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -e AUTO_UPDATE=true \
  -p 9117:9117 \
  -v "$(pwd)/jackett-dev/conf:/config" \
  --restart unless-stopped \
  --net=torrent \
  ghcr.io/linuxserver/jackett
  
docker build -t flaresolverr:test .
  
docker run -d --name flaresolverr \
  -e CAPTCHA_SOLVER=anticaptcha \
  -e ANTI_CAPTCHA_APIKEY=xxxxxx \
  -e LOG_LEVEL=debug \
  --net=torrent \
  flaresolverr:test

result when adding YGGTorrent indexer

result :

2020-12-16T03:30:30.067Z INFO REQ-0 FlareSolverr v1.2.0 listening on http://0.0.0.0:8191
2020-12-16T03:31:52.409Z INFO REQ-1 Incoming request: POST /v1
2020-12-16T03:31:52.417Z INFO REQ-1 Params: {"maxTimeout":60000,"cmd":"request.get","url":"https://www.yggtorrent.si/","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
2020-12-16T03:31:52.420Z DEBUG REQ-1 Launching headless browser...
2020-12-16T03:31:53.032Z DEBUG REQ-1 Using custom UA: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
2020-12-16T03:31:53.040Z DEBUG REQ-1 Adding custom headers: {}
2020-12-16T03:31:53.040Z DEBUG REQ-1 { headers: [Function (anonymous)] }
2020-12-16T03:31:53.053Z DEBUG REQ-1 Navigating to... https://www.yggtorrent.si/
2020-12-16T03:31:53.084Z DEBUG REQ-1 {
  headers: {
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
  }
}
2020-12-16T03:31:53.318Z INFO REQ-1 Cloudflare detected
2020-12-16T03:31:53.377Z DEBUG REQ-1 Waiting for Cloudflare challenge...
2020-12-16T03:31:59.760Z DEBUG REQ-1 Validating HTML code...
2020-12-16T03:32:00.137Z INFO REQ-1 Successful response in 7.728 s
2020-12-16T03:32:37.332Z INFO REQ-2 Incoming request: POST /v1
2020-12-16T03:32:37.333Z INFO REQ-2 Params: {"maxTimeout":60000,"cmd":"request.get","url":"https://www2.yggtorrent.si/engine/search?category=all&name=&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&attempt=1","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
2020-12-16T03:32:37.334Z DEBUG REQ-2 Launching headless browser...
2020-12-16T03:32:38.219Z DEBUG REQ-2 Using custom UA: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
2020-12-16T03:32:38.229Z DEBUG REQ-2 Adding custom headers: {}
2020-12-16T03:32:38.230Z DEBUG REQ-2 { headers: [Function (anonymous)] }
2020-12-16T03:32:38.232Z DEBUG REQ-2 Navigating to... https://www2.yggtorrent.si/engine/search?category=all&name=&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&attempt=1
2020-12-16T03:32:38.272Z DEBUG REQ-2 {
  headers: {
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
  }
}
2020-12-16T03:32:38.586Z INFO REQ-2 Cloudflare detected
2020-12-16T03:32:38.681Z DEBUG REQ-2 Waiting for Cloudflare challenge...
2020-12-16T03:32:44.716Z DEBUG REQ-2 Validating HTML code...
2020-12-16T03:32:44.749Z INFO REQ-2 Successful response in 7.417 s
2020-12-16T03:32:45.682Z INFO REQ-3 Incoming request: POST /v1
2020-12-16T03:32:45.683Z INFO REQ-3 Params: {"maxTimeout":60000,"cmd":"request.get","url":"https://www.yggtorrent.si/","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
2020-12-16T03:32:45.683Z DEBUG REQ-3 Launching headless browser...
2020-12-16T03:32:46.120Z DEBUG REQ-3 Using custom UA: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
2020-12-16T03:32:46.124Z DEBUG REQ-3 Adding custom headers: {}
2020-12-16T03:32:46.124Z DEBUG REQ-3 { headers: [Function (anonymous)] }
2020-12-16T03:32:46.130Z DEBUG REQ-3 Navigating to... https://www.yggtorrent.si/
2020-12-16T03:32:46.157Z DEBUG REQ-3 {
  headers: {
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
  }
}
2020-12-16T03:32:46.364Z INFO REQ-3 Cloudflare detected
2020-12-16T03:32:46.411Z DEBUG REQ-3 Waiting for Cloudflare challenge...
2020-12-16T03:32:52.702Z DEBUG REQ-3 Validating HTML code...
2020-12-16T03:32:53.066Z INFO REQ-3 Successful response in 7.384 s
2020-12-16T03:32:56.551Z INFO REQ-4 Incoming request: POST /v1
2020-12-16T03:32:56.551Z INFO REQ-4 Params: {"maxTimeout":60000,"cmd":"request.get","url":"https://www2.yggtorrent.si/engine/search?category=all&name=&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&attempt=1","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
2020-12-16T03:32:56.552Z DEBUG REQ-4 Launching headless browser...
2020-12-16T03:32:56.961Z DEBUG REQ-4 Using custom UA: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
2020-12-16T03:32:56.967Z DEBUG REQ-4 Adding custom headers: {}
2020-12-16T03:32:56.967Z DEBUG REQ-4 { headers: [Function (anonymous)] }
2020-12-16T03:32:56.969Z DEBUG REQ-4 Navigating to... https://www2.yggtorrent.si/engine/search?category=all&name=&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&attempt=1
2020-12-16T03:32:56.999Z DEBUG REQ-4 {
  headers: {
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
  }
}
2020-12-16T03:32:57.211Z INFO REQ-4 Cloudflare detected
2020-12-16T03:32:57.279Z DEBUG REQ-4 Waiting for Cloudflare challenge...
2020-12-16T03:33:07.922Z DEBUG REQ-4 Reloaded page...
2020-12-16T03:33:13.938Z DEBUG REQ-4 Validating HTML code...
2020-12-16T03:33:13.971Z INFO REQ-4 Successful response in 17.42 s

i got results, but i'm not sure i'm really using my captcha solver

@xfouloux
Copy link
Collaborator Author

xfouloux commented Dec 16, 2020

i managed to make a test using Cpasbien

2020-12-16T05:22:22.251Z ERROR REQ-6 TypeError: Cannot destructure property 'sitekey' of 'undefined' as it is undefined.
    at solve (/home/node/flaresolverr/dist/captcha/anticaptcha.js:7:33)
    at resolveChallenge (/home/node/flaresolverr/dist/routes.js:148:41)
    at processTicksAndRejections (node:internal/process/task_queues:93:5)
    at async browserRequest (/home/node/flaresolverr/dist/routes.js:290:22)
    at async request.get (/home/node/flaresolverr/dist/routes.js:330:9)
    at async Object.Router [as default] (/home/node/flaresolverr/dist/routes.js:351:16)
2020-12-16T05:22:22.254Z ERROR REQ-6 Unable to process browser request. Error: TypeError: Cannot destructure property 'sitekey' of 'undefined' as it is undefined.

well i think i found my issue, methods for anticaptcha needs to be passed with the sitekey, and i'm using type to switch(case)

so i needed to modify the export to be :

export default async function solve({ url, type, sitekey }: SolverOptions): Promise<string> {

now, i'm having trouble finding a site with the challenge, because now cpasbien respond this to me

image

@abeloin
Copy link
Collaborator

abeloin commented Dec 16, 2020

For the error 1020, look in the returned headers, there should be one with a timestamp indicating how long the ban is.

Also makes sure you call the page with a referer in the header

@abeloin
Copy link
Collaborator

abeloin commented Dec 16, 2020

A forgot to mention, it's already passing the sitekey:

export interface SolverOptions {
  url: string
  sitekey: string
  type: CaptchaType
}

also in route.ts:

log.info('Waiting to receive captcha token to bypass challenge...')
const token = await captchaSolver({
  url,
  sitekey,
  type: captchaType
})

@ngosang
Copy link
Member

ngosang commented Dec 16, 2020

You can test with this site. I get hCaptcha 100% of the time:
https://pirateiro.com/torrents/?search=

@xfouloux
Copy link
Collaborator Author

xfouloux commented Dec 17, 2020

i'm having a bit of an issue there :

related : NoahCardoza/CloudProxy#18

code is

import log from '../log'

import { SolverOptions } from '.'
/*
    This method uses the @antiadmin/anticaptchaofficial project:
        https://github.com/AdminAnticaptcha/anticaptcha-npm
    TODO: 
    ENV:
        
*/

const solveCaptcha = require('@antiadmin/anticaptchaofficial');
let task = "";

export default async function solve({ url, sitekey, type }: SolverOptions): Promise<string> {
  try {
    log.debug(`Using anti-captcha solver with params`);
    log.debug(`url ${url}`);
    log.debug(`type ${type}`);
    log.debug(`sitekey ${sitekey}`);

    solveCaptcha.setAPIKey('xxxxxxxxxx')
    
    solveCaptcha.getBalance()
     .then(
       (balance: string) => console.log('my anti-captcha balance is $'+balance)
     )
     .catch((error: string) => console.log('received error '+error))
    //switch between functions given captchatype
    
    switch(type) {
      case 'funCaptcha':
        task = await solveCaptcha.solveFunCaptchaProxyless(url, sitekey)
        .then((gresponse: string) => {
            console.log('result: '+gresponse);
        })
        .catch((error: string) => console.log('test received error '+error));
        break;
      case 'reCaptcha':
        task = await solveCaptcha.solveRecaptchaV3(url,
            sitekey,
            0.3, //minimum score required: 0.3, 0.7 or 0.9
            'PAGE_ACTION_CAN_BE_EMPTY')
            .then((gresponse: string) => {
                console.log('g-response: '+gresponse);
            })
            .catch((error: string) => console.log('test received error '+error));
        break;
      case 'hCaptcha':
        task = await solveCaptcha.solveHCaptchaProxyless(url, sitekey)
            .then((gresponse: string) => {
            console.log('g-response: '+gresponse);
            })
            .catch((error: string) => console.log('test received error '+error));
        break;
      default:
        // code block
    }
    console.log('task result:' + task)
    return task
  } catch (e) {
    console.error(e)
    return null
  }
}

but result give that sitekey is not being sent

2020-12-17T01:17:27.415Z INFO REQ-1 Cloudflare detected
2020-12-17T01:17:27.478Z DEBUG REQ-1 No '#trk_jschal_js' challenge element detected.
2020-12-17T01:17:27.501Z DEBUG REQ-1 No '.ray_id' challenge element detected.
2020-12-17T01:17:27.516Z DEBUG REQ-1 No '.attack-box' challenge element detected.
2020-12-17T01:17:27.577Z INFO REQ-1 Waiting to receive captcha token to bypass challenge...
2020-12-17T01:17:27.580Z DEBUG REQ-1 Using anti-captcha solver with params
2020-12-17T01:17:27.581Z DEBUG REQ-1 url https://pirateiro.com/torrents/?search=
2020-12-17T01:17:27.583Z DEBUG REQ-1 type hCaptcha
2020-12-17T01:17:27.584Z DEBUG REQ-1 sitekey null
my anti-captcha balance is $5.00181
Received API error ERROR_INCORRECT_SESSION_DATA: Some of the required values for successive user emulation are missing. Missing property 'websiteKey'
test received error ERROR_INCORRECT_SESSION_DATA
task result:undefined
2020-12-17T01:17:28.999Z ERROR REQ-1 Token solver failed to return a token.

i think it's because in route.ts there is

if (captchaType != 'hCaptcha' && process.env.CAPTCHA_SOLVER != 'hcaptcha-solver') {
  const sitekeyElem = await page.$('*[data-sitekey]')
  if (!sitekeyElem) { return ctx.errorResponse('Could not find sitekey!') }
  sitekey = await sitekeyElem.evaluate((e) => e.getAttribute('data-sitekey'))
}

but it is a hcaptcha and hcaptcha have sitekey, So i commented out the if, and it confirms what i was not seeing in page code, it seems the page do not have a data-sitekey
moreover, anti captcha function asks for sitekey

    solveHCaptchaProxyless(websiteURL, websiteKey) {
        return new Promise((resolve, reject) => {
            this.JSONRequest('createTask', {
                'clientKey' : this.settings.clientKey,
                'task' : {
                    type:                   'HCaptchaTaskProxyless',
                    websiteURL:             websiteURL,
                    websiteKey:             websiteKey
                }
            })
                .then(res => {
                    this.settings.taskId = res.taskId;
                    return this.waitForResult(res.taskId);
                })
                .then(solution => {
                    resolve(solution.gRecaptchaResponse)
                })
                .catch(err => reject(err));
        });
    },

@xfouloux
Copy link
Collaborator Author

xfouloux commented Dec 17, 2020

using another website https://www.spacetorrent.cloud/

i get this html code

i need to get the sitekey from the div at bottom i guess, because it's not in a 'data-sitekey=' in an html element but in the iframe address

<div id="cf-hcaptcha-container"><iframe src="https://assets.hcaptcha.com/captcha/v1/6c04760/static/hcaptcha-checkbox.html#id=0vupeb0hr4yi&amp;host=www.spacetorrent.cloud&amp;sentry=true&amp;reportapi=https%3A%2F%2Faccounts.hcaptcha.com&amp;recaptchacompat=off&amp;sitekey=f9630567-8bfa-4fc9-8ee5-9c91c6276dff" title="widget containing checkbox for hCaptcha security challenge" tabindex="0" frameborder="0" scrolling="no" data-hcaptcha-widget-id="0vupeb0hr4yi" data-hcaptcha-response="" style="width: 303px; height: 78px; overflow: hidden;"></iframe><textarea id="h-captcha-response-0vupeb0hr4yi" name="h-captcha-response" style="display: none;"></textarea></div>

full html

<form class="challenge-form" id="challenge-form" action="/?__cf_chl_captcha_tk__=4ebc2981f3fbf0d5d93ff1c4eb5834f8c69d22b3-1608178191-0-AXIhkAVx2nN4qufDoqsY83A0UWr-eCgsgXm3ojSNXAv_NnLUpmaTHlnF2vQIPSjbOuHSVHtxF8rfFXDPNrF894T5WuB-J5keoojx_hpXK_YkxoCj-EobF3b-ehE1RTCZbgZI9vvxPXYoi3YmayQLxvOBqbbFm8h0xt8qJPPRsDPPBDaHxasmwdjjzMgeXk0x1rHjWJy15RIWK7D4JwjMBWGLlimbVuZ_FIwKN403y0HbkB5653omsTB2JRVPPJ7PX6AELO2w7FgcG5wT3frkzA9iqrmVvjg3jVGqWDx4z0Mss_dWLaByH5Gmv0xQEadTEktS9zXnC8PpkU1BgErnAJxPsa1oOxCbO31UNJqIUT-WanM-VqbIv-OpIhDnfk47wT0LphzOthPVSaoA536sE2sPqI_velqjC6K_-pm7fcZz9g7Q_4o0XmSkDB8AdQqQCj4y8M6pdX5hLbOPanNyHjoucX9BHL5i473jm6v8WfZ9YKOT7ebQMWHquHFGlRsJJrzWFmYBSxNZLom0s7kQW2gPNvFIbSNyguBY9duk_vsue2INxVQ4WjxPsOIlgFfQnOX9jmqzDrrIBbpao05GTVqfvX7YHXYesE9A4s75OP6K" method="POST" enctype="application/x-www-form-urlencoded">
  
    <div id="cf-please-wait" style="display: none;">
      <div id="spinner">
        <div id="cf-bubbles">
            <div class="bubbles"></div>
            <div class="bubbles"></div>
            <div class="bubbles"></div>
        </div>
      </div>
      <p data-translate="please_wait" id="cf-spinner-please-wait">Please stand by, while we are checking your browser...</p>
      </div>
  
  <input type="hidden" name="r" value="20ba2dc8dfe7ee245ece2910d201f37f5591315e-1608178191-0-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">
  <input type="hidden" name="cf_captcha_kind" value="h">
  <input type="hidden" name="vc" value="8d74b186a819606b81875770fac75dd6">
  
  <noscript id="cf-captcha-bookmark" class="cf-captcha-info">
  <h1 data-translate="turn_on_js" style="color:#bd2426;">Please turn JavaScript on and reload the page.</h1>
  </noscript>
    <div id="no-cookie-warning" class="cookie-warning" data-translate="turn_on_cookies" style="display:none">
      <p data-translate="turn_on_cookies" style="color: rgb(189, 36, 38); --darkreader-inline-color:#de5052;" data-darkreader-inline-color="">Please enable Cookies and reload the page.</p>
    </div>
  <script type="text/javascript">
  //<![CDATA[
    var a = function() {try{return !!window.addEventListener} catch(e) {return !1} },
      b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)};
      b(function(){
        var cookiesEnabled=(navigator.cookieEnabled)? true : false;
        if(!cookiesEnabled){
          var q = document.getElementById('no-cookie-warning');q.style.display = 'block';
        }
      });
  //]]>
  </script>
  <div id="trk_captcha_js" style="background-image:url('/cdn-cgi/images/trace/captcha/nojs/h/transparent.gif?ray=602dca828ee816b1')"></div>
<div id="cf-hcaptcha-container"><iframe src="https://assets.hcaptcha.com/captcha/v1/6c04760/static/hcaptcha-checkbox.html#id=0vupeb0hr4yi&amp;host=www.spacetorrent.cloud&amp;sentry=true&amp;reportapi=https%3A%2F%2Faccounts.hcaptcha.com&amp;recaptchacompat=off&amp;sitekey=f9630567-8bfa-4fc9-8ee5-9c91c6276dff" title="widget containing checkbox for hCaptcha security challenge" tabindex="0" frameborder="0" scrolling="no" data-hcaptcha-widget-id="0vupeb0hr4yi" data-hcaptcha-response="" style="width: 303px; height: 78px; overflow: hidden;"></iframe><textarea id="h-captcha-response-0vupeb0hr4yi" name="h-captcha-response" style="display: none;"></textarea></div></form>

@abeloin
Copy link
Collaborator

abeloin commented Dec 17, 2020

if (captchaType != 'hCaptcha' && process.env.CAPTCHA_SOLVER != 'hcaptcha-solver')

This should run if hcaptcha and your solver isn't 'hcaptcha-solver'

Yes, you will have to modify the code in route.ts to make it work as Cloudflare + hcaptcha change a few month ago.

See this for more info: https://github.com/scaredos/cfresearch

@xfouloux
Copy link
Collaborator Author

well yeah this is way above what i know to do =) !
Right now i'm having a timeout on https://www.spacetorrent.cloud/ because it won't follow the redirection with the cf_chl_jschl_tk token

i don't know if i can manage to do anything about the new way to get/solve etc... i'll try but don't expect much :/

@Zelak312
Copy link

I see that this PR to implement Anti-captcha got dropped. I recently implemented the Anti-captcha addon in a playwright application. If it's fine to implement it via the addon instead of the API, I wouldn't mind trying to add it to FlareSolverr. I am just not really sure how the setup will work, if for example we package the addon within FlareSolverr or we let the user download and set it up?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
captcha solver service enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

4 participants