решение recaptcha без формы отправки / нажатия кнопки (использует обратный вызов) - PullRequest
0 голосов
/ 24 апреля 2020

я пытаюсь найти ответ с веб-сайта, который я пытаюсь очистить

обычно так оно и есть, капча находится внутри формы, я отправлю данные капчи на решение капчи API (я использую DB C), они возвращают токен

Я помещаю токен в поле ввода капчи (#g-recaptcha-response), и даже если зеленая галочка не отображается, когда я отправляю форму, она будет принята

но этот веб-сайт автоматически отображает информацию, которую я хочу удалить, как только капча решается другим способом, когда появляется зеленая проверка капчи, страница обновляется с новой информацией

, поэтому мой вопрос, когда я Поместите токен в поле ввода капчи. Есть ли способ инициировать событие, разрешенное капчей (или что-то происходит, когда появляется зеленая галочка. Я предполагаю какой-то обратный вызов) без отправки формы?

edit:

, исследуя конфигурацию recaptcha, я нашел это

___grecaptcha_cfg.clients[0].L.L.callback

, которое указывает на это

function verifyCallback(e)

, но я не уверен, как вызвать его

async function init_puppeteer() {

    const global_browser = await puppeteer.launch({headless: false     , slowMo : 10 ,  args: ['--no-sandbox', '--disable-setuid-sandbox' , ]});
    const page = await global_browser.newPage();
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
    await page.setViewport({width: 1200, height: 1500});

    try {


        await page.goto('https://example.com', {timeout: 60000})
            .catch(function (error) {
                throw new Error('TimeoutBrows');
            });

        await page.waitForSelector('input[name="url"]');
        await page.type('input[name="url"]', 'example.com' , {delay: 10})
        await page.click('button.css-117i75i-button');
        await page.waitForSelector('#g-recaptcha' ,{visible : true });
        const datakey = await page.$eval('#g-recaptcha' , el => el.getAttribute('data-sitekey'));
        const cap = await solvecaptcha(datakey ,page.url() );

        await page.$eval('#g-recaptcha-response', (el  , cap ) => el.value = cap , cap );
        console.log('done!');


    }
    catch(e)
    {
        console.log('--------ERRRO--------------------------');
        console.log(e);
        await  page.close();

    }
}

1 Ответ

0 голосов
/ 25 апреля 2020

Я нашел ответ, на всякий случай, если у кого-то возникла эта проблема, просто в консоли браузера поиграйте с этим объектом ___grecaptcha_cfg, чтобы найти мой обратный вызов, здесь

___grecaptcha_cfg.clients[0].L.L.callback

, но он может иметь другую структуру для другие сайты

поэтому, в основном, после того, как я получил токен и поместил его в # g-recaptcha-response`, я вызвал эту функцию и передал токен в качестве аргумента

    let js = `___grecaptcha_cfg.clients[0].L.L.callback("${cap}")`;
    await page.evaluate(js);
...