Пример для разгадывания reCAPTCHA 2 без установки плагина в браузер
Решение рекапчи для headless браузерных движков без установки расширения AntiCaptcha. Инициализация API ключа, подключение исполняемого кода.
Для тех, кто пользуется headless, браузерными движками или просто не могут/не хотят ставить наш плагин на браузер мы придумали подключаемый JS файл, который позволяет решать капчу. Сейчас это только решение Рекапчи, капчи-картинки пока не решаются.
Данный подключаемый JS файл годится в том числе для приложения iMacros, отличается только способ его подключения, он рассмотрен на странице Решение reCAPTCHA 2 в приложении iMacros.
Инициализация API ключа Anti-Captcha.com
Перед подключением кода, решающего Рекапчу, необходимо указать свой AntiCaptcha API ключ, который просто помещается в DIV элемент при помощи следующего кода:
(function(){
// ...
var d = document.getElementById("anticaptcha-imacros-account-key");
if (!d) {
d = document.createElement("div");
d.innerHTML = "YOUR-ANTI-CAPTCHA-API-KEY";
d.style.display = "none";
d.id = "anticaptcha-imacros-account-key";
document.body.appendChild(d);
}
// ...
})();
В нем необходимо поменять YOUR-ANTI-CAPTCHA-API-KEY на значение вашего ключа.
Ничего криминального, этот код просто создает невидимый элемент с id=anticaptcha-imacros-account-key, помещает в него ключ и добавляет этот элемент на целевую страницу, впоследствии данный ключ будет считан JS кодом, решающим рекапчу.
Данный код можно выполнить в любом окружении, например, в консоли браузера, или в подключаемом JS файле или из другого расширения, например, TamperMonkey или Greasemonkey.
Подключение файла решения рекапчи
Далее подключаем уже собственно скрипт, который будет решать капчу:
(function(){
// ...
var s = document.createElement("script");
s.src = "https://cdn.antcpt.com/imacros_inclusion/recaptcha.js?" + Math.random();
document.body.appendChild(s);
// ...
})();
Этот код создает SCRIPT элемент с адресом https://cdn.antcpt.com/imacros_inclusion/recaptcha.js и помещает в DOM. Рекомендуется всегда подгружать этот JS файл с нашего сервера, так вы будете уверены, что имеете последнюю версию скрипта со всеми исправлениями и дополнениями.
На выходе в сухом остатке имеем следующие строки:
(function(){
// ...
var d = document.getElementById("anticaptcha-imacros-account-key");
if (!d) {
d = document.createElement("div");
d.innerHTML = "YOUR-ANTI-CAPTCHA-API-KEY";
d.style.display = "none";
d.id = "anticaptcha-imacros-account-key";
document.body.appendChild(d);
}
var s = document.createElement("script");
s.src = "https://cdn.antcpt.com/imacros_inclusion/recaptcha.js?" + Math.random();
document.body.appendChild(s);
// ...
})();
На некоторых сайтах при помощи заголовка Content-Security-Policy запрещается подключение всех сторонних скриптов, в том числе таких как упомянутый выше recaptcha.js .
В таком случае весь код JS файла по решению Рекапчи можно вставить разом одной линией. Вместо создания SCRIPT элемента в свой код вы помещаете содержимое следующего файла
https://cdn.antcpt.com/imacros_inclusion/recaptcha.ai-sl.js .
Весь код решения капчи и модулей зашит в одну большую-большую строку. Это неудобно, некрасиво и не рекомендуется. Но иногда другого пути просто нет.
Пример решения Рекапчи для Headless Chrome с использованием Puppeteer
Puppeteer — библиотека на NodeJS, которая обеспечивает высокоуровневое API для контроля хеадлесс Chrome или Chromium при помощи DevTools Protocol. Может звучать страшно, но на деле оказывается хорошей штукой для автоматизации действий в хедлесс Хроме, позволяет делать многое разными способами. Смотрите в документации способ установки и базовые примеры.
Приведенный ниже код заходит на страницу с тестовой Рекапчей, решает ее и отправляет форму. Далее делается скриншот для большей наглядности. Для решения Рекапчи как всегда создается DIV, в который помещается AntiCaptcha API ключ, а затем подключается уже знакомый нам https://cdn.antcpt.com/imacros_inclusion/recaptcha.js файл.
const puppeteer = require('puppeteer');
puppeteer.launch().then(async (browser) => {
const page = await browser.newPage();
// устанавлицаем размер окна
page.setViewport({ width: 1024, height: 768 });
// выводим дебаг информацию от anti-captcha solver
page.on('console', msg => {
for (let i = 0; i < msg.args().length; ++i) {
console.log(`${i}: ${msg.args()[i]}`);
}
});
page.once('load', async () => {
// Записываем Anti-Captcha API ключ в элемент DIV#anticaptcha-imacros-account-key element
await page.evaluate(() => {
var antcptAccountKeyDiv = document.getElementById("anticaptcha-imacros-account-key");
if (!antcptAccountKeyDiv) {
antcptAccountKeyDiv = document.createElement("div");
// Поместите сюда ваш Anti-Captcha API ключ
antcptAccountKeyDiv.innerHTML = "YOUR-ANTI-CAPTCHA-API-KEY";
antcptAccountKeyDiv.style.display = "none";
antcptAccountKeyDiv.id = "anticaptcha-imacros-account-key";
document.body.appendChild(antcptAccountKeyDiv);
}
});
// anticaptchaUserCallbackMethod will be called (if defined) when something changes
// captchaSolvingInfo contains "status" field of a captcha solving process,
// which might be: in_process, error, solved
await page.exposeFunction('anticaptchaUserCallbackMethod', (captchaSolvingInfo) => {
console.log('captchaSolvingInfo', captchaSolvingInfo);
});
// Подключение recaptcha.js файла с функционалом разгадывания рекапчи
await page.addScriptTag({ url: 'https://cdn.antcpt.com/imacros_inclusion/recaptcha.js'});
// Заполняем текстовое поле тестовым значением
await page.$eval('input[name=demo_text]', el => el.value = 'Test message');
// Самая важная чаcть: ждем 120 секунд пока индикатор антикаптчи с классом antigate_solver
// не получит класс solved, что означает что рекапча решена
await page.waitForSelector('.antigate_solver.solved', { timeout: 120 * 1000 });
// Отправляем форму и ждем загрузки страницы
const navigationPromise = page.waitForNavigation();
page.click(['input[type=submit]']);
await navigationPromise;
// Проверяем все ли правильно мы сделали
await page.screenshot({ path: 'screenshot_solved.png' });
// Закрываем браузер
await browser.close();
});
// Переходим на тестовую страницу
await page.goto('https://antcpt.com/rus/information/demo-form/recaptcha-2.html');
});