Обход капчи при парсинге на PHP
Чтобы обойти капчу, нужно понимать, как она устроена изнутри.
Когда мы заходим на страницу с формой — там уже есть капча или она подгружается через некоторое время.
Откуда берется эта капча? Она генерируется скриптом PHP при обращению на заданный URL, пусть для примера этот URL такой — capcha.php. Тогда в HTML коде формы для картинки капчи будет такой код: <img src=»http://old.code.mu/books/advanced/php/parsing/capcha.php»>.
Если мы зайдем на страницу с формой, то картинка капчи автоматически подтянется со страницы capcha.php.
При этом страница capcha.php — это скрипт, который генерирует случайную строку, делает из нее картинку капчи и отдает ее в браузер.
Кроме того страница capcha.php сохраняет строку с капчей в сессию. Это нужно для того, чтобы проверить правильность ввода капчи по отправке формы.
Если обратиться на страницу capcha.php — она каждый раз будет отдавать новую капчу и, соответственно, эта новая капча будет затирать старую в сессии.
Как обойти капчу
Итак, теперь вы знаете как устроена капча. Давайте теперь о том, как ее обойти. Для этого нужно сделать несколько запросов с помощью CURL.
Первый запрос должен слаться на файл с капчей. Куда его слать — видно в HTML коде формы или же можно отследить в отладчике, куда отправляются запросы.
Результатом данной операции будет картинка, ее можно сохранить в файл с помощью file_put_contents. Зачем сохранять — чтобы можно было прочитать капчу и разобрать ее каким-либо образом (для начала вручную).
Запрос на капчу обязательно следует слать через curl, а не file_get_contents, так как нам обязательно следует принимать и оправлять куки — ведь капча работает на сессиях PHP.
Итак, получаем капчу, сохраняем его в файл, разбираем эту капчу вручную и шлем второй запрос уже на страницу с формой вместе с POST данными для формы (и с разобранной капчей).
Не ошибитесь и не сделайте лишнего запроса к капче!
Использование сервисов распознавания
В предыдущем примере мы распознавали вручную, однако, чаще всего это делать нецелесообразно.
Лучше подключить специальный сервис, на котором специально обученные китайцы за копейки разбирают капчи.
Как это работает: вы считываете капчу в файл, а затем используя API сервиса отправляете эту капчу на сервис. Через 3-5 секунд получаете эту капчу обратно в разобранном виде.
Стоит это удовольствие не дорого — менее одного доллара за 1000 разобранных капч.
Сбор данных с обходом капчи посредством PYAUTOGUI, KERAS и TENSORFLOW
Существует большое количество методов для автоматического сбора и обработки больших объемов данных из веб-ресурсов. Однако иногда недоступно извлечение данных с помощью автоматизированного кода, выполняющего GET-запросы с последующим парсингом HTML-кода, и его преобразованием в необходимый формат, также, как и все смежные методы. В таких случаях на помощь может прийти эмулятор действия пользователя («кликер», «бот», «робот»).
Была поставлена следующая задача: необходимо получить информацию на определенном веб-ресурсе (упустим его наименование) на основе файла Excel со списком определенных данных (на 2000 строк). В связи с тем, что все методы автоматизированного парсинга и скрапинга невозможны, а время ограничено, обращаем внимание, что нам подойдет и эмулятор мыши и клавиатуры.
Для работы простого эмулятора нам потребуются библиотеки:
Но есть одно препятствие: ввод капчи, которая имеет вид:

На просторах интернета можно найти множество алгоритмов по работе с капчами в рамках машинного обучения, и мы воспользуемся одним из них. Ознакомиться с нашим выбором можно здесь — https://habr.com/ru/post/464337/
Нашей же задачей останется обучить уже готовый алгоритм.
Как видно из кода, для обучения модели было скачено 1000 изображений. Далее их необходимо обработать: разрезать и распределить по директориям в зависимости от чисел на изображениях. Воспользуемся кодом ниже:
Для обучения модели формируем следующую логику директории:

В dat мы разобрали числа по папкам от 0 до 9, где в каждой из папок располагается соответствующее число. Например, 0 (ноль):

В сумме получилось по 500 изображений в каждой из папок.
train_simple.py – файл для обучения модели.
И самое главное — директория output, где будет располагаться обученная модель.
Подготовительная работа выполнена, осталось обучить модель. Открываем командную строку, переходим в нашу директорию и вводим команду:
Модель для распознавания капчи обучена. Видим следующий результат:

Это означает, что на обучающем наборе достигнута верность — 98,2%, на контрольном — 97,8 % и на тестовом — 97,8 %. Ориентируемся на последнее значение. Посмотрим на визуальную интерпретацию модели в директории output файл simple_nn_plot.png:

Помним, что 100% результата не будет. В целом, распознавание 5 чисел занимает около 10 сек.
Итак, подключим файл для распознавания к нашему основному коду:
Следующая задача – выяснить все необходимые координаты для работы эмулятора мыши.
Суть проста: наводим мышкой на нужную позицию, нажимаем «пробел» и получаем нужные нам координаты. Перейдем к основному коду эмулятора:
Пишем функцию для упрощения общего кода.
Логика проста: данные из столбца нашего Excel-файла будут вноситься в поле ввода на веб-ресурсе, после – распознается и вводится капча, нажимается кнопка проверки и текстовый результат проверки вносится во второй датафрейм, формируя таким образом таблицу Excel с итоговыми данными, взятыми из веб-ресурса.
Код содержит несколько логических блока:
• Работа с полем ввода с данными из исходной таблицы Excel. DataFrame(df1) исходной таблицы Excel, где лежат данные, содержит столбец «id». Значения в столбце содержат до 10 символов. Работа кода предполагает, что берется значение из строки «i» столбца «id» в соответствии с номером круга цикла. Пока значения в столбце не закончатся, цикл не прервется.
• Работа с капчей. Создаем бесконечный цикл, условием выхода из которого будет правильный ввод капчи. Мы качаем изображение капчи, вызываем функцию из сформированного ранее модуля, далее происходит попытка ввода. Если капча введена верно, то цикл прерывается и мы переходим к следующему логическому блоку, если нет, то возвращаем в начало цикла, удаляя скаченное изображение.
• Немного о логике проверки ввода. В случае неудачного ввода, на главной странице появляется предупреждение и не пропадает, более того, текст предупреждения можно копировать. Последним и воспользуемся. Чтобы проверить введена ли капча правильно, мы ищем текст по конкретным координатам и проверяем, что там сказано, если советуют повторить попытку ввода, то, соответственно, возвращаемся в начало цикла.
• Блок извлечения данных при верном вводе капчи. Все просто: мы берем и копируем нужный нам текст по определенным координатам, сохраняя этот текст в переменные.
• Блок формирования результирующей таблице. Создается словарь с нужными нам данными. Этот словарь представляет собой одну строку в таблице.Теперь мы автоматизировали сбор данных и подключили модель машинного обучения для распознавания капчи, что позволило увеличить скорость работы в сравнении с человеческими ресурсами.
How to Bypass Google Recaptcha while scraping with Requests
![]()
Using Google Cache along with a referer (in the header) will help you bypass the captcha.
Things to note:
- Don’t send more than 2 requests/sec. You may get blocked.
- The result you receive is a cache. This will not be effective if you are trying to scrape a real-time data.
Example:
![]()
-
The Overflow Blog
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.11.43304
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
How To Solve CAPTCHA While Web Scraping?
CAPTCHAs are one of the most popular anti-scraping techniques implemented by website owners. reCaptcha v3 is a CAPTCHA integration solution from Google to detect bot traffic on websites. NuCaptcha, hCaptcha are some other advanced CAPTCHA solutions. But CAPTCHAs are quite irritating, not just for users but also for web scrapers. Solving CAPTCHAs is one of the top challenges faced by web scrapers. Read this insight to find different ways of solving CAPTCHAs while you scrape your target website’s content.