Решение сложных капч с помощью Puppeteer и Playwright с использованием CapMonster Cloud
Puppeteer и Playwright – это библиотеки для автоматизации действий в браузере. С их помощью вы можете управлять браузером и выполнять какую-либо работу, будь то открытие страниц и навигация по ним, заполнение форм, нажатие кнопок, извлечение информации и другие задачи. Вы также можете автоматизировать разгадывание капч на сайтах, если добавите к этим инструментам использование облачного сервиса CapMonster Cloud. Ниже мы рассмотрим их интеграцию и приведем примеры кода, которые можно использовать для автоматического решения капч.
Puppeteer и Playwright не сильно отличаются друг от друга. Puppeteer был создан командой Google, это библиотека Node.js, работает на языке JavaScript. У него есть свой уже встроенный браузер на движке Chromium, вам не нужно дополнительно вручную устанавливать вебдрайвер, как это необходимо, например, в Selenium. Playwright разработан компанией Microsoft, он более гибкий и несколько расширяет возможности Puppeteer, позволяя работать на нескольких языках, включая JavaScript, TypeScript, Python, C# и другие. Он так же, как и Puppeteer, имеет встроенный браузер, даже не один – у вас будет возможность протестировать работу на нескольких браузерах, включая Chromium, Firefox и WebKit (Safari). Давайте рассмотрим использование Puppeteer и Playwright совместно с CapMonster Cloud:
Puppeteer
Работу с мы будем выполнять в VS Code, поэтому ориентироваться будем на эту среду. Все примеры кодов будут выполняться без использования прокси. Если вам необходимо указать прокси, просто дополнительно при создании задачи указывайте их параметры и актуальный user-agent, например:
"clientKey":"ВАШ_API_KEY",
"task": {
"type":"RecaptchaV2Task",
"websiteURL":"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
"websiteKey":"EXAMPLE_SITE_KEY",
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere",
"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
Итак, чтобы установить Puppeteer, вам нужно выполнить такие шаги:
Установка Node.js. Puppeteer требует Node.js, поэтому его наличие обязательно, убедитесь, что у вас установлена актуальная версия.
- Создание проекта. Создайте новую директорию для вашего проекта, если у вас ее еще нет.
- Инициализация Node.js. Откройте терминал в VS Code (нажмите Ctrl + ~ для открытия интегрированного терминала), перейдите в вашу директорию и выполните команду npm init, далее следуйте инструкциям в терминале. Эта команда инициирует новый проект Node.js и создаст файл package.json. Все установленные зависимости будут отображаться в этом файле.
- Установка Puppeteer. В терминале VS Code выполните команду npm install puppeteer для загрузки Puppeteer и его зависимостей в ваш проект.
Теперь нужно установить удобную для вас библиотеку для отправки и получения HTTP-запросов. У CapMonster Cloud есть для этого собственная библиотека, ее мы и будем использовать в наших примерах. Установите ее командой npm i @zennolab_com/capmonstercloud-client.
ReCaptcha v.2
Вам нужно будет узнать sitekey капчи и прочие данные, необходимые для удачной отправки запроса, получения ответа и вставки токена в элемент капчи. Всё это можно будет узнать, просмотрев код в инструментах разработчика. Также обязательно изучите официальную документацию CapMonster Cloud.
- Создадим новый проект на языке JavaScript, импортируем все необходимые зависимости:
import { launch } from 'puppeteer';
import { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2ProxylessRequest } from '@zennolab_com/capmonstercloud-client';
- Далее установим значения (кстати говоря, для удобства и исключения утечки данных лучше создать в этой же директории отдельный файл .env и записать все эти данные туда, используя их в коде с помощью установленной и импортированной в проект библиотеки dotenv):
const CAPMONSTER_API_KEY = 'ВАШ_API_KEY';
const WEBSITE_KEY = 'EXAMPLE_SITE_KEY';
const WEBSITE_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high';
- Создадим задачу, отправим ее на сервер CapMonster Cloud, получим решение и организуем вставку токена в форму капчи:
async function solveRecaptcha() {
const browser = await launch({ headless: false });
const page = await browser.newPage();
// Инициализация клиента CapMonster
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
try {
await page.goto(WEBSITE_URL);
console.log('Страница открыта, решение reCAPTCHA...');
// Создание запроса для решения reCAPTCHA типа V2 Proxyless
const recaptchaV2ProxylessRequest = new RecaptchaV2ProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// Решение reCAPTCHA с использованием CapMonster
const solution = await cmcClient.Solve(recaptchaV2ProxylessRequest);
console.log('Решение от CapMonster:', solution);
// Извлечение токена из объекта решения
const token = solution.solution.gRecaptchaResponse;
// Вставка результата в форму
await page.evaluate((result) => {
document.getElementById('g-recaptcha-response').value = result;
console.log('Токен в консоли:', result); // Вывод токена в консоль
}, token);
console.log('Токен вставлен в форму!');
await page.click('#recaptcha-demo-submit');
console.log('Форма отправлена!'); // Опциональный шаг
await new Promise(resolve => setTimeout(resolve, 10000));
} catch (error) {
console.error('Ошибка:', error);
} finally {
await browser.close();
}
}
solveRecaptcha();
Пояснение кода:
async function solveRecaptcha() {...}: Объявление асинхронной функции solveRecaptcha, которая будет содержать весь код.
const browser = await launch({ headless: false });: Запуск браузера с помощью Puppeteer. Опция headless: false означает, что браузер будет запущен с графическим интерфейсом (не в фоновом режиме).
const page = await browser.newPage();: Создание новой вкладки в браузере.
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));: Инициализация клиента CapMonster с использованием предоставленного API-ключа.
await page.goto(WEBSITE_URL);: Переход на указанный веб-сайт.
const recaptchaV2ProxylessRequest = new RecaptchaV2ProxylessRequest({ ... });: Создание объекта запроса для решения reCAPTCHA типа V2 Proxyless. Здесь задаются параметры, такие как URL веб-сайта и ключ reCAPTCHA.
const solution = await cmcClient.Solve(recaptchaV2ProxylessRequest);: Отправка запроса на CapMonster для решения reCAPTCHA. Результат сохраняется в объекте solution.
const token = solution.solution.gRecaptchaResponse;: Извлечение токена (ответа reCAPTCHA) из объекта решения CapMonster.
await page.evaluate((result) => {...}, token);: Вставка токена в форму на веб-странице с использованием метода evaluate Puppeteer.
await page.click('#recaptcha-demo-submit');: Нажатие на кнопку с указанным селектором (в данном случае, кнопка с id recaptcha-demo-submit).
await new Promise(resolve => setTimeout(resolve, 10000));: Ожидание 10 секунд (в данном случае, пауза) с использованием Promise.
} catch (error) { console.error('Error:', error); } finally { await browser.close(); }}: Обработка ошибок (если они возникнут) и закрытие браузера в блоке finally.
solveRecaptcha();: Вызов функции solveRecaptcha для выполнения всего процесса.
Вот так выглядит весь код:
import { launch } from 'puppeteer';
import { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2ProxylessRequest } from '@zennolab_com/capmonstercloud-client';
const CAPMONSTER_API_KEY = 'ВАШ_API_KEY';
const WEBSITE_KEY = 'EXAMPLE_SITE_KEY';
const WEBSITE_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high';
async function solveRecaptcha() {
const browser = await launch({ headless: false });
const page = await browser.newPage();
// Инициализация клиента CapMonster
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
try {
await page.goto(WEBSITE_URL);
console.log('Страница открыта, решение reCAPTCHA...');
// Создание запроса для решения reCAPTCHA типа V2 Proxyless
const recaptchaV2ProxylessRequest = new RecaptchaV2ProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// Решение reCAPTCHA с использованием CapMonster
const solution = await cmcClient.Solve(recaptchaV2ProxylessRequest);
console.log('Решение от CapMonster:', solution);
// Извлечение токена из объекта решения
const token = solution.solution.gRecaptchaResponse;
// Вставка результата в форму
await page.evaluate((result) => {
document.getElementById('g-recaptcha-response').value = result;
console.log('Токен в консоли:', result); // Вывод токена в консоль
}, token);
console.log('Токен вставлен в форму!');
await page.click('#recaptcha-demo-submit');
console.log('Форма отправлена!'); // Опциональный шаг
await new Promise(resolve => setTimeout(resolve, 10000));
} catch (error) {
console.error('Ошибка:', error);
} finally {
await browser.close();
}
}
solveRecaptcha();
- Запустим код через команду в терминале: node your_project_name.js или через debug console. В случае удачного выполнения откроется подтверждённая страница:
ReCaptcha v.3
- Импортируем все необходимые зависимости:
import { launch } from 'puppeteer';
import { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV3ProxylessRequest } from '@zennolab_com/capmonstercloud-client';
- Установим значения:
const CAPMONSTER_API_KEY = 'ВАШ_API_KEY';
const WEBSITE_KEY = 'EXAMPLE_SITE_KEY';
const WEBSITE_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta';
- Создадим задачу, отправим ее на сервер CapMonster Cloud, получим решение и организуем вставку токена в форму капчи:
async function solveRecaptcha() {
const browser = await launch({ headless: false });
const page = await browser.newPage();
console.log('Browser is initialized!');
// Инициализация CapMonster клиента
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
try {
await page.goto(WEBSITE_URL, {
waitUntil: 'domcontentloaded'
});
console.log('Browser page is switched to captcha page!');
const recaptchaV3ProxylessRequest = new RecaptchaV3ProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
minScore: 0.7,
pageAction: "verify",
});
// Получение решения капчи от CapMonster
const solution = await cmcClient.Solve(recaptchaV3ProxylessRequest);
console.log('CapMonster Solution:', solution);
// Установка пользовательского userAgent (действие необязательное)
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'); // Можете исправить на свой
await page.evaluate((result) => {
document.querySelector('#g-recaptcha-response-100000').style.display = 'block';
document.querySelector('#g-recaptcha-response-100000').style.visibility = 'visible';
document.querySelector('#g-recaptcha-response-100000').value = result;
}, solution);
console.log('Result injected into the page!');
await Promise.all([
page.waitForNavigation(),
page.click('#v3_submit')
]);
console.log('Button "Проверить" clicked!');
await new Promise(resolve => setTimeout(resolve, 10000));
} catch (e) {
console.error('An error occurred:', e);
} finally {
await browser.close();
}
}
solveRecaptcha();
Пояснение данной части кода:
async function solveRecaptcha() {...}: Объявление асинхронной функции solveRecaptcha, которая содержит весь код.
const browser = await launch({ headless: false });: Запуск браузера с помощью Puppeteer. Опция headless: false означает, что браузер будет запущен с графическим интерфейсом (не в фоновом режиме).
const page = await browser.newPage();: Создание новой вкладки в браузере.
console.log('Browser is initialized!');: Вывод в консоль сообщения о том, что браузер инициализирован.
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));: Инициализация клиента CapMonster с использованием предоставленного API-ключа.
await page.goto(WEBSITE_URL);: Переход на указанный веб-сайт.
const recaptchaV3ProxylessRequest = new RecaptchaV3ProxylessRequest({ ... });: Создание объекта запроса для решения reCAPTCHA типа V3 Proxyless. Здесь задаются параметры, такие как URL веб-сайта и ключ reCAPTCHA.
const solution = await cmcClient.Solve(recaptchaV3ProxylessRequest);: Отправка запроса на CapMonster для решения reCAPTCHA. Результат сохраняется в объекте solution.
await page.evaluate((result) => {...}, solution);: Вставка решения reCAPTCHA в форму на веб-странице с использованием метода evaluate Puppeteer.
await Promise.all([...]);: Ожидание одновременно завершения навигации и клика по кнопке с указанным селектором.
console.log('Result injected into the page!');: Вывод в консоль сообщения о том, что результат вставлен на страницу.
await new Promise(resolve => setTimeout(resolve, 10000));: Ожидание 10 секунд (пауза) с использованием Promise.
} catch (e) { console.error('An error occurred:', e); } finally { await browser.close(); }}: Обработка ошибок (если они возникнут) и закрытие браузера в блоке finally.
solveRecaptcha();: Вызов функции solveRecaptcha для выполнения всего процесса.
Весь код:
import { launch } from 'puppeteer';
import { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV3ProxylessRequest } from '@zennolab_com/capmonstercloud-client';
const CAPMONSTER_API_KEY = 'ВАШ_API_KEY';
const WEBSITE_KEY = 'EXAMPLE_SITE_KEY';
const WEBSITE_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta';
async function solveRecaptcha() {
const browser = await launch({ headless: false });
const page = await browser.newPage();
console.log('Browser is initialized!');
// Инициализация CapMonster клиента
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
try {
await page.goto(WEBSITE_URL, {
waitUntil: 'domcontentloaded'
});
console.log('Browser page is switched to captcha page!');
const recaptchaV3ProxylessRequest = new RecaptchaV3ProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
minScore: 0.7,
pageAction: "verify",
});
// Получение решения капчи от CapMonster
const solution = await cmcClient.Solve(recaptchaV3ProxylessRequest);
console.log('CapMonster Solution:', solution);
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36');
await page.evaluate((result) => {
document.querySelector('#g-recaptcha-response-100000').style.display = 'block';
document.querySelector('#g-recaptcha-response-100000').style.visibility = 'visible';
document.querySelector('#g-recaptcha-response-100000').value = result;
}, solution);
console.log('Result injected into the page!');
await Promise.all([
page.waitForNavigation(),
page.click('#v3_submit')
]);
console.log('Button "Проверить" clicked!');
await new Promise(resolve => setTimeout(resolve, 10000));
} catch (e) {
console.error('An error occurred:', e);
} finally {
await browser.close();
}
}
solveRecaptcha();
- Запустим код:
Cloudflare Turnstile
Здесь заполним небольшую контактную форму на тестовом сайте tsmanaged.zlsupport.com и решим капчу типа Cloudflare Turnstile. Так же, как и для предыдущих типов капч, нам нужно будет узнать sitekey самой капчи в инструментах разработчика в браузере.
- Импортируем зависимости и пропишем значения:
import { launch } from 'puppeteer';
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileProxylessRequest } from '@zennolab_com/capmonstercloud-client';
const CAPMONSTER_API_KEY = 'ВАШ_API_KEY';
const WEBSITE_KEY = 'EXAMPLE_SITE_KEY';
const WEBSITE_URL = 'http://tsmanaged.zlsupport.com';
- Запустим браузер, создадим задачу для CapMonster Cloud, отправим ее на сервер, получим и вставим результат на страницу:
async function solveCloudflareTurnstileCaptcha() {
const browser = await launch({ headless: false });
const page = await browser.newPage();
// Инициализация CapMonster клиента
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
try {
await page.goto(WEBSITE_URL);
console.log('Page opened, solving Cloudflare Turnstile CAPTCHA...');
await page.type('#username', 'login');
await page.type('#password', 'pass');
const turnstileTaskRequest = new TurnstileProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// Получение решения капчи от CapMonster
const solutionObject = await cmcClient.Solve(turnstileTaskRequest);
console.log('CapMonster Solution:', solutionObject);
const token = solutionObject.solution.token;
console.log('Captcha solved:', token);
// Вставка токена в поле "token"
await page.evaluate((extractedToken) => {
const tokenField = document.querySelector('#token');
if (tokenField) {
tokenField.value = extractedToken;
}
}, token);
console.log('Token inserted into the "token" field!');
// Клик на кнопке "Submit" после вставки токена
await page.evaluate(() => {
const submitButton = document.querySelector('button[type="submit"]');
if (submitButton) {
submitButton.click();
}
});
console.log('Clicked on the "Submit" button after token insertion!');
await new Promise(resolve => setTimeout(resolve, 5000));
} catch (error) {
console.error('Error:', error);
} finally {
await browser.close();
}
}
solveCloudflareTurnstileCaptcha();
Пояснение данной части кода:
async function solveCloudflareTurnstileCaptcha() { ... }: Объявление асинхронной функции solveCloudflareTurnstileCaptcha, которая содержит весь код для решения Cloudflare Turnstile CAPTCHA.
const browser = await launch({ headless: false });: Запуск браузера с помощью Puppeteer. Опция headless: false указывает, что браузер будет запущен с графическим интерфейсом.
const page = await browser.newPage();: Создание новой вкладки (страницы) в браузере.
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));: Инициализация клиента CapMonster с использованием предоставленного API-ключа.
await page.goto(WEBSITE_URL);: Переход на страницу с Cloudflare Turnstile CAPTCHA.
console.log('Page opened, solving Cloudflare Turnstile CAPTCHA...');: Вывод в консоль сообщения о том, что страница открыта и начат процесс решения Cloudflare Turnstile CAPTCHA.
await page.type('#username', 'login');: Ввод данных в поле "username".
await page.type('#password', 'pass');:Ввод данных в поле "password".
const turnstileTaskRequest = new TurnstileProxylessRequest({ ... });:Создание объекта запроса для решения Turnstile CAPTCHA. Задаются параметры, такие как URL веб-сайта и ключ Turnstile CAPTCHA.
const solutionObject = await cmcClient.Solve(turnstileTaskRequest);: Отправка запроса на CapMonster для решения Turnstile CAPTCHA. Результат сохраняется в объекте solutionObject.
console.log('CapMonster Solution:', solutionObject);: Вывод в консоль информации о решении от CapMonster.
const token = solutionObject.solution.token;: Извлечение токена (результата решения) из объекта solutionObject.
console.log('Captcha solved:', token);: Вывод в консоль сообщения о том, что CAPTCHA решена и отображение токена.
await page.evaluate((extractedToken) => { ... }, token);: Вставка токена в поле "token" на веб-странице с помощью метода evaluate Puppeteer.
console.log('Token inserted into the "token" field!');: Вывод в консоль сообщения о том, что токен вставлен в поле "token".
await page.evaluate(() => { ... });: Клик на кнопке "Submit" после вставки токена с использованием метода evaluate Puppeteer.
console.log('Clicked on the "Submit" button after token insertion!');: Вывод в консоль сообщения о том, что была выполнена операция клика на кнопке "Submit" после вставки токена.
await new Promise(resolve => setTimeout(resolve, 5000));: Пауза на 5 секунд с использованием Promise.
} catch (error) { console.error('Error:', error); } finally { await browser.close(); }: Обработка ошибок (если они возникнут) с выводом сообщения об ошибке в консоль. Закрытие браузера в блоке finally для гарантированного завершения.
solveCloudflareTurnstileCaptcha();: Вызов функции solveCloudflareTurnstileCaptcha для выполнения всего процесса решения Cloudflare Turnstile CAPTCHA.
Вот так выглядит весь код:
import { launch } from 'puppeteer';
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileProxylessRequest } from '@zennolab_com/capmonstercloud-client';
const CAPMONSTER_API_KEY = 'ВАШ_API_KEY';
const WEBSITE_KEY = 'EXAMPLE_SITE_KEY';
const WEBSITE_URL = 'www.example.com';
async function solveCloudflareTurnstileCaptcha() {
const browser = await launch({ headless: false });
const page = await browser.newPage();
// Инициализация CapMonster клиента
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
try {
await page.goto(WEBSITE_URL);
console.log('Page opened, solving Cloudflare Turnstile CAPTCHA...');
await page.type('#username', 'login');
await page.type('#password', 'pass');
const turnstileTaskRequest = new TurnstileProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// Получение решения капчи от CapMonster
const solutionObject = await cmcClient.Solve(turnstileTaskRequest);
console.log('CapMonster Solution:', solutionObject);
const token = solutionObject.solution.token;
console.log('Captcha solved:', token);
// Вставка токена в поле "token"
await page.evaluate((extractedToken) => {
const tokenField = document.querySelector('#token');
if (tokenField) {
tokenField.value = extractedToken;
}
}, token);
console.log('Token inserted into the "token" field!');
// Клик на кнопке "Submit" после вставки токена
await page.evaluate(() => {
const submitButton = document.querySelector('button[type="submit"]');
if (submitButton) {
submitButton.click();
}
});
console.log('Clicked on the "Submit" button after token insertion!');
await new Promise(resolve => setTimeout(resolve, 5000));
} catch (error) {
console.error('Error:', error);
} finally {
await browser.close();
}
}
solveCloudflareTurnstileCaptcha();
- Запустим код. Если все сделано правильно, код выполнит решение капчи и откроет страницу с подтверждением:
Playwright
Puppeteer мы использовали на языке JavaScript. Теперь для разнообразия давайте попробуем использовать Playwright на языке Python. Работу будем по-прежнему выполнять в VS Code, вот шаги по установке Playwright:
- Установка Playwright: создайте новую папку, где будут размещаться файлы проекта, откройте ее в VS Code, запустите следующую команду в вашем терминале: pip install playwright
- Установка браузеров: после установки Playwright выполните команду, чтобы сразу установить все поддерживаемые браузеры (Chromium, Firefox, WebKit): python -m playwright install
Чтобы установить только один браузер, например, Chromium, выполните команду: python -m playwright install chromium
Установите официальную библиотеку CapMonster Cloud командой pip install capmonstercloudclient.
Теперь можно писать код для автоматического решения капчи.
ReCaptcha v.2
- Импортируйте все необходимые зависимости и пропишите данные (можете создать для данных отдельный файл .env):
import asyncio
from playwright.async_api import async_playwright
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
API_KEY = "ВАШ_API_KEY"
WEBSITE_URL = "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high"
WEBSITE_KEY = "EXAMPLE_SITE_KEY"
- Создайте задачу для отправки ее на сервер, используя имеющиеся данные, получим ответ и подставьте решение в форму капчи:
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
async def solve_captcha():
# Создание запроса на решение reCAPTCHA типа V2 Proxyless
recaptcha_request = RecaptchaV2ProxylessRequest(websiteUrl=WEBSITE_URL, websiteKey=WEBSITE_KEY)
return await cap_monster_client.solve_captcha(recaptcha_request)
async def main():
try:
async with async_playwright() as p:
# Запуск браузера
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
# Открытие веб-сайта
await page.goto(WEBSITE_URL)
print('Страница открыта, ожидание загрузки reCAPTCHA...')
# Подождать некоторое время для загрузки CAPTCHA (можно настроить длительность)
await asyncio.sleep(5)
# Решение reCAPTCHA с использованием CapMonster
responses = await solve_captcha()
print('Ответ от CapMonster:', responses)
# Вставка решенного reCAPTCHA в страницу
await page.evaluate(f'document.getElementById("g-recaptcha-response").innerHTML = "{responses["gRecaptchaResponse"]}";')
print('Результат вставлен на страницу!')
# Выполнение дополнительных действий при необходимости (например, отправка формы)
await page.click('#recaptcha-demo-submit')
print('Форма отправлена!')
# Подождать некоторое время для наблюдения за изменениями
await asyncio.sleep(10)
except Exception as e:
print('Ошибка:', e)
finally:
# Закрытие браузера
await browser.close()
asyncio.run(main())
Пояснение данной части кода:
client_options = ClientOptions(api_key=API_KEY): Инициализация параметров клиента CapMonster с использованием предоставленного API-ключа.
cap_monster_client = CapMonsterClient(options=client_options): Создание клиента CapMonster с использованием опций, определенных в client_options.
async def solve_captcha(): ...: Асинхронная функция solve_captcha, которая создает запрос на решение капчи типа reCAPTCHA V2 Proxyless и передает его клиенту CapMonster для решения.
async def main(): ...: Асинхронная функция main, которая включает в себя основной код для открытия браузера, загрузки страницы, решения капчи с использованием CapMonster, вставки решения на страницу и выполнения дополнительных действий.
async with async_playwright() as p: ...: Использование async_playwright для управления браузером с помощью Playwright в асинхронном режиме.
browser = await p.chromium.launch(headless=False): Запуск браузера Chromium с возможностью отображения графического интерфейса (не в режиме headless).
await page.goto(WEBSITE_URL): Переход на указанный веб-сайт.
await asyncio.sleep(5): Пауза для ожидания загрузки CAPTCHA (в данном случае, 5 секунд).
responses = await solve_captcha(): Вызов функции solve_captcha для решения reCAPTCHA с использованием CapMonster.
await page.evaluate(f'document.getElementById("g-recaptcha-response").innerHTML = "{responses["gRecaptchaResponse"]}";'): Вставка решения reCAPTCHA на страницу с помощью метода evaluate Playwright.
await page.click('#recaptcha-demo-submit'): Клик на кнопке с указанным селектором (в данном случае, кнопка "Submit" на демонстрационной странице reCAPTCHA).
await asyncio.sleep(10): Пауза для наблюдения за изменениями после отправки формы (в данном случае, 10 секунд).
await browser.close(): Закрытие браузера в блоке finally для завершения.
asyncio.run(main()): Запуск асинхронной функции main.
Весь код:
import asyncio
from playwright.async_api import async_playwright
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
API_KEY = "ВАШ_API_KEY"
WEBSITE_URL = "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high"
WEBSITE_KEY = "EXAMPLE_SITE_KEY"
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
async def solve_captcha():
# Создание запроса на решение reCAPTCHA типа V2 Proxyless
recaptcha_request = RecaptchaV2ProxylessRequest(websiteUrl=WEBSITE_URL, websiteKey=WEBSITE_KEY)
return await cap_monster_client.solve_captcha(recaptcha_request)
async def main():
try:
async with async_playwright() as p:
# Запуск браузера
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
# Открытие веб-сайта
await page.goto(WEBSITE_URL)
print('Страница открыта, ожидание загрузки reCAPTCHA...')
# Подождать некоторое время для загрузки CAPTCHA (можно настроить длительность)
await asyncio.sleep(5)
# Решение reCAPTCHA с использованием CapMonster
responses = await solve_captcha()
print('Ответ от CapMonster:', responses)
# Вставка решенного reCAPTCHA в страницу
await page.evaluate(f'document.getElementById("g-recaptcha-response").innerHTML = "{responses["gRecaptchaResponse"]}";')
print('Результат вставлен на страницу!')
# Выполнение дополнительных действий при необходимости (например, отправка формы)
await page.click('#recaptcha-demo-submit')
print('Форма отправлена!')
# Подождать некоторое время для наблюдения за изменениями
await asyncio.sleep(10)
except Exception as e:
print('Ошибка:', e)
finally:
# Закрытие браузера
await browser.close()
asyncio.run(main())
Успешное решение капчи:
ReCaptcha v.3
- Импортируйте все необходимые зависимости и пропишите данные:
import asyncio
from playwright.async_api import async_playwright
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV3ProxylessRequest
CAPMONSTER_API_KEY = 'ВАШ_API_KEY'
WEBSITE_KEY = 'EXAMPLE_SITE_KEY'
WEBSITE_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta'
- Создайте задачу, отправьте на сервер и получите решение:
async def solve_recaptcha():
# Инициализация Playwright
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
print('Браузер инициализирован!')
# Инициализация CapMonster клиента
client_options = ClientOptions(api_key=CAPMONSTER_API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
try:
# Установка пользовательского userAgent
(действие необязательное)
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' #Исправьте на свой
await page.set_extra_http_headers({'User-Agent': user_agent})
# Переход на указанную страницу
await page.goto(WEBSITE_URL, wait_until='domcontentloaded')
print('Браузер переключен на страницу с капчей!')
# Создание запроса для решения reCAPTCHA типа V3 Proxyless
recaptcha_request = RecaptchaV3ProxylessRequest(
websiteUrl=WEBSITE_URL,
websiteKey=WEBSITE_KEY,
action='verify',
min_score=0.7,
)
# Решение reCAPTCHA с использованием CapMonster
task_result = await cap_monster_client.solve_captcha(recaptcha_request)
print('reCAPTCHA V3 решена:', task_result)
# Вставка результата на страницу
await page.evaluate(f'document.querySelector(\'#g-recaptcha-response-100000\').style.display = "block";')
await page.evaluate(f'document.querySelector(\'#g-recaptcha-response-100000\').style.visibility = "visible";')
await page.evaluate(f'document.querySelector(\'#g-recaptcha-response-100000\').value = "{task_result}";')
print('Результат вставлен на страницу!')
# Клик по кнопке для проверки
await page.click('#v3_submit')
print('Кнопка "Проверить" нажата!')
# Пауза на 10 секунд
await page.wait_for_timeout(10000)
finally:
# Закрытие браузера
await browser.close()
# Запуск асинхронной функции для решения reCAPTCHA
asyncio.run(solve_recaptcha())
Пояснение данной части кода:
async with async_playwright() as p: ...: Использование async_playwright для управления браузером с помощью Playwright в асинхронном режиме.
browser = await p.chromium.launch(headless=False): Запуск браузера Chromium с возможностью отображения графического интерфейса (не в режиме headless).
await page.goto(URL): Переход на указанный веб-сайт.
client_options = ClientOptions(api_key=API_KEY): Инициализация параметров клиента CapMonster с использованием предоставленного API-ключа.
cap_monster_client = CapMonsterClient(options=client_options): Создание клиента CapMonster с использованием опций, определенных в client_options.
recaptcha_request = RecaptchaV3ProxylessRequest(...: Создание объекта запроса для решения reCAPTCHA V3 Proxyless. Здесь задаются параметры, такие как URL веб-сайта, ключ reCAPTCHA, действие и минимальный балл.
task_result = await cap_monster_client.solve_captcha(recaptcha_request): Решение reCAPTCHA с использованием CapMonster. Результат сохраняется в task_result.
await page.evaluate(f'document.querySelector(\'#g-recaptcha-response-100000\').style.display = "block";'): Вставка результата на страницу с помощью метода evaluate Playwright. В данном случае, изменяется стиль элемента, чтобы он стал видимым.
await page.click('[data-action="demo_action"]'): Клик по кнопке с указанным селектором (в данном случае, кнопка "Проверить").
await asyncio.sleep(10): Пауза на 10 секунд для наблюдения изменений.
await browser.close(): Закрытие браузера в блоке finally для завершения.
asyncio.run(solve_recaptcha()): Запуск асинхронной функции solve_recaptcha.
Весь код:
import asyncio
from playwright.async_api import async_playwright
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV3ProxylessRequest
CAPMONSTER_API_KEY = 'ВАШ_API_KEY'
WEBSITE_KEY = 'EXAMPLE_SITE_KEY'
WEBSITE_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta'
async def solve_recaptcha():
# Инициализация Playwright
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
print('Браузер инициализирован!')
# Инициализация CapMonster клиента
client_options = ClientOptions(api_key=CAPMONSTER_API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
try:
# Установка пользовательского агента
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
await page.set_extra_http_headers({'User-Agent': user_agent})
# Переход на указанную страницу
await page.goto(WEBSITE_URL, wait_until='domcontentloaded')
print('Браузер переключен на страницу с капчей!')
# Создание запроса для решения reCAPTCHA типа V3 Proxyless
recaptcha_request = RecaptchaV3ProxylessRequest(
websiteUrl=WEBSITE_URL,
websiteKey=WEBSITE_KEY,
action='verify',
min_score=0.7,
)
# Решение reCAPTCHA с использованием CapMonster
task_result = await cap_monster_client.solve_captcha(recaptcha_request)
print('reCAPTCHA V3 решена:', task_result)
# Вставка результата на страницу
await page.evaluate(f'document.querySelector(\'#g-recaptcha-response-100000\').style.display = "block";')
await page.evaluate(f'document.querySelector(\'#g-recaptcha-response-100000\').style.visibility = "visible";')
await page.evaluate(f'document.querySelector(\'#g-recaptcha-response-100000\').value = "{task_result}";')
print('Результат вставлен на страницу!')
# Клик по кнопке для проверки
await page.click('#v3_submit')
print('Кнопка "Проверить" нажата!')
# Пауза на 10 секунд
await page.wait_for_timeout(10000)
finally:
# Закрытие браузера
await browser.close()
# Запуск асинхронной функции для решения reCAPTCHA
asyncio.run(solve_recaptcha())
- Если вы все сделали правильно, код выполнит автоматическое решение капчи и откроет страницу с успешной верификацией:
Cloudflare Turnstile
- Импортируйте необходимые зависимости:
import asyncio
from playwright.async_api import async_playwright
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TurnstileProxylessRequest
- Пропишите данные (или используйте их импорт из файла .env):
API_KEY = 'ВАШ_API_KEY'
WEBSITE_KEY = 'EXAMPLE_SITE_KEY'
WEBSITE_URL = 'www.example.com'
- Создайте задачу, отправьте ее на сервер CapMonster Cloud для решения капчи, получите результат и вставьте токен в подходящий элемент капчи:
async def solve_turnstile_captcha():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
try:
await page.goto(WEBSITE_URL)
print('Page opened, solving Cloudflare Turnstile CAPTCHA...')
# Заполните поля "username" и "password" своими учетными данными
await page.fill('input[name="username"]', 'yourlogin')
await page.fill('input[name="password"]', 'yourpass')
# Инициализация CapMonster клиента
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
turnstile_request = TurnstileProxylessRequest(
websiteURL=WEBSITE_URL,
websiteKey=WEBSITE_KEY,
)
# Решение Cloudflare Turnstile CAPTCHA с использованием CapMonster
task_result = await cap_monster_client.solve_captcha(turnstile_request)
token = task_result.get('token')
print('Captcha solved:', token)
# Вставка токена в поле "token"
await page.evaluate(f'document.querySelector(\'#token\').value = \'{token}\';')
print('Token inserted into the "token" field!')
# Нажатие на кнопку "Submit" после вставки токена
await page.click('button[type="submit"]')
print('Clicked on the "Submit" button after token insertion!')
await asyncio.sleep(5)
except Exception as e:
print(f"An error occurred: {e}")
finally:
await browser.close()
asyncio.run(solve_turnstile_captcha())
Пояснение данной части кода:
async with async_playwright() as p: ...: Использование async_playwright для управления браузером с помощью Playwright в асинхронном режиме.
browser = await p.chromium.launch(headless=False): Запуск браузера Chromium с возможностью отображения графического интерфейса (не в режиме headless).
context = await browser.new_context(): Создание нового контекста для страницы.
page = await context.new_page(): Создание новой страницы в новом контексте.
await page.goto(WEBSITE_URL): Переход на указанный веб-сайт.
await page.fill('input[name="username"]', 'yourlogin'): Заполнение поля "username" указанным логином.
await page.fill('input[name="password"]', 'yourpass'): Заполнение поля "password" указанным паролем.
client_options = ClientOptions(api_key=API_KEY): Инициализация параметров клиента CapMonster с использованием предоставленного API-ключа.
cap_monster_client = CapMonsterClient(options=client_options): Создание клиента CapMonster с использованием опций, определенных в client_options.
turnstile_request = TurnstileProxylessRequest(...: Создание объекта запроса для решения Cloudflare Turnstile CAPTCHA Proxyless. Здесь задаются параметры, такие как URL веб-сайта и ключ.
task_result = await cap_monster_client.solve_captcha(turnstile_request): Решение Cloudflare Turnstile CAPTCHA с использованием CapMonster. Результат сохраняется в task_result.
token = task_result.get('token'): Извлечение токена из результатов решения.
await page.evaluate(f'document.querySelector(\'#token\').value = \'{token}\';'): Вставка токена в поле "token" с использованием метода evaluate Playwright.
await page.click('button[type="submit"]'): Нажатие на кнопку "Submit".
await asyncio.sleep(5): Пауза на 5 секунд для наблюдения изменений.
await browser.close(): Закрытие браузера в блоке finally для завершения.
asyncio.run(solve_cloudflare_turnstile_captcha()): Запуск асинхронной функции solve_cloudflare_turnstile_captcha.
Весь код:
import asyncio
from playwright.async_api import async_playwright
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TurnstileProxylessRequest
API_KEY = 'ВАШ_API_KEY'
WEBSITE_KEY = 'EXAMPLE_SITE_KEY'
WEBSITE_URL = 'www.example.com '
async def solve_turnstile_captcha():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
try:
await page.goto(WEBSITE_URL)
print('Page opened, solving Cloudflare Turnstile CAPTCHA...')
# Заполните поля "username" и "password" своими учетными данными
await page.fill('input[name="username"]', 'yourlogin')
await page.fill('input[name="password"]', 'yourpass')
# Инициализация CapMonster клиента
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
turnstile_request = TurnstileProxylessRequest(
websiteURL=WEBSITE_URL,
websiteKey=WEBSITE_KEY,
)
# Решение Cloudflare Turnstile CAPTCHA с использованием CapMonster
task_result = await cap_monster_client.solve_captcha(turnstile_request)
token = task_result.get('token')
print('Captcha solved:', token)
# Вставка токена в поле "token"
await page.evaluate(f'document.querySelector(\'#token\').value = \'{token}\';')
print('Token inserted into the "token" field!')
# Нажатие на кнопку "Submit" после вставки токена
await page.click('button[type="submit"]')
print('Clicked on the "Submit" button after token insertion!')
await asyncio.sleep(5)
except Exception as e:
print(f"An error occurred: {e}")
finally:
await browser.close()
asyncio.run(solve_turnstile_captcha())
- Запустите проект и посмотрите результат. Если все пройдет удачно, откроется страница с пройденной верификацией:
Заключение
Как видите, решение капч только кажется сложной задачей, все, что вам нужно – данные сайта и самой капчи, указание ее типа и правильное составление задачи, ее отправки и получения/вставки токена в нужный элемент. Все остальное сделает CapMonster Cloud. Использовать совместно его можно практически с любыми библиотеками и фреймворками, и интеграция этого сервиса с Puppeteer или Playwright с помощью кода позволит вам быстро и эффективно получать на нужных сайтах решение даже самых сложных капч.
NB: Напоминаем, что продукт используется для автоматизации тестирования на ваших собственных сайтах и на сайтах, к которым у вас есть доступ на законных основаниях.