Как обойти слайдер-капчу с помощью Puppeteer и 2Captcha
Демо находится в репозитории проекта по этой ссылке.
Введение
Слайдер-капчи широко используются на веб-сайтах для предотвращения доступа ботов к ограниченному контенту или выполнения несанкционированных действий. Хотя они обеспечивают простой и удобный способ проверки пользователей, они могут ограничивать доступность, вызывать раздражение у пользователей и создавать сложности при тестировании приложений и сайтов. В этой статье рассматриваются методы обхода слайдер-капч с использованием автоматизации и инструментов, при соблюдении этических норм.
Преимущества и недостатки
Преимущества
- Простая реализация: Легко интегрируется с минимальными техническими знаниями.
- Доступность: Требуется минимальное взаимодействие с мышью или сенсорным экраном.
- Совместимость с мобильными устройствами: Предусмотрены естественные действия свайпа для пользователей мобильных устройств.
Недостатки
- Проблемы с доступностью: Могут исключать пользователей с ограниченными возможностями.
- Уязвимость к автоматизации: Подвержены обходу с использованием продвинутых методов автоматизации.
- Раздражение пользователей: Может ухудшать пользовательский опыт при неправильной реализации.
Как обойти слайдер-капчу
Для обхода слайдер-капч можно использовать такие фреймворки автоматизации, как Puppeteer, и сторонние сервисы, такие как 2Captcha. Ниже приведено пошаговое руководство:
1. Подготовьте окружение
Установите необходимые зависимости:
yarn add puppeteer @2captcha/captcha-solver
Установите API-ключ в качестве переменной окружения:
export APIKEY=ваш_api_ключ
2. Настройте проект
Убедитесь, что ваш файл package.json
содержит следующий параметр для использования модулей ES6:
{
"type": "module"
}
3. Реализация кода
Создайте файл с именем index.js
и начните разработку:
Импортируйте зависимости
import puppeteer from 'puppeteer';
import { Solver } from '@2captcha/captcha-solver';
import { readFile } from 'node:fs/promises';
const solver = new Solver(process.env.APIKEY);
const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
Запустите браузер и откройте страницу с капчей
(async () => {
const browser = await puppeteer.launch({
devtools: true,
slowMo: 11,
});
const [page] = await browser.pages();
await page.goto('https://www.jqueryscript.net/demo/image-puzzle-slider-captcha/');
let success = false;
Обработка согласий и подготовка инструкций
while (!success) {
try {
const consentButton = await page.waitForSelector('button.fc-button.fc-cta-do-not-consent.fc-secondary-button', { timeout: 3000 });
if (consentButton) consentButton.click();
} catch (e) {}
const instruction = await readFile('./imginstructions.png', { encoding: 'base64' });
Решение капчи с использованием 2Captcha API
const img = await page.evaluate(() => document.querySelector('canvas').toDataURL());
if (img.length < 2000) continue;
try {
const res = await solver.coordinates({
body: img,
textinstructions: 'Puzzle center | Центр пазла',
imginstructions: instruction,
});
const slider = await page.$('div.slider');
const bb = await slider.boundingBox();
const init = {
x: bb.x + bb.width / 2,
y: bb.y + bb.height / 2,
};
const target = {
x: bb.x + bb.width / 2 + parseFloat(res.data[0].x) - 20,
y: res.data[0].y,
};
await page.mouse.move(init.x, init.y);
await page.mouse.down();
await page.mouse.move(target.x, target.y, { steps: randomInt(50, 100) });
await page.mouse.up();
Проверка и завершение
await page.waitForNavigation({ timeout: 5000 });
success = true;
await solver.goodReport(res.id);
await page.screenshot({ path: 'screenshot.png' });
await page.close();
await browser.close();
} catch (e) {
await solver.badReport(res.id);
}
}
})();
Этические аспекты
При обходе капч всегда соблюдайте этические нормы. Убедитесь, что ваши действия соответствуют местным законам, и избегайте несанкционированного доступа к системам.
Часто задаваемые вопросы (FAQ)
Зачем использовать Puppeteer для автоматизации капч?
Puppeteer предоставляет мощный фреймворк для управления действиями браузера, что делает его идеальным для работы с капчами.
Что такое 2Captcha?
2Captcha — это сервис, решающий капчи с помощью человеческих работников и предоставляющий результаты через API.
Ссылки
Поддержка
Для дополнительной помощи свяжитесь с поддержкой через:
- Create a ticket
- Send an e-mail to support@2captcha.com
- Skype
Следуя этому руководству, вы сможете эффективно обходить слайдер-капчи, соблюдая при этом этические нормы.