Текстовая капча может иметь любой интерфейс и оформление, но ее суть в том, что пользователю предлагается ответить на вопрос. Ответ пользователя должен быть в текстовом формате. Вопросы могут быть разные, но, как правило, ответ на них одно или два слова или число.
Вопросы могут быть на разных языках, это зависит от предпочтения разработчика сайта.
Вопросы могут примерно такими:
Если завтра понедельник, то какой сегодня день?
Пять плюс семь равно сколько?
Красный, синий, зелёный, сколько цветов в списке?
Джон Сноу, какая фамилия у Джона ?
И т.д и т.п.
Нам нужно найти указанный тег и извлечь из него текст «The number of body parts in the list dress, eye, stomach, T-shirt and chin is?» и отправить его в rucaptcha.
Сервер ждет правильный ответ от капчи, после чего отдаст нам данные в JSON, затем фронтенд расставит данные из JSON по своим местам. По этой причине мы можем парсить либо фронт, либо бэк.
Нам нужно выбрать, что мы будем парсить: фронт или бэк, почему это важно, сейчас поймете. Это нужно выбирать не только при обходе текстовой капчи, а при обходе любой капчи.
Важное отличие парсинга фронтенда от бэкенда — во время парсинга бэкенда вы не получаете уведомлений о капче, а только статус-код. Используя его, мы можем понять, что возможно встретилась капча. То, что капча не проверена можно понять по сообщению об ошибке от бэкенда. Однако на практике такое предупреждение может и не быть, поэтому лучше ориентироваться по факту и смотреть текст ошибки и статус-код.
Алгоритмов парсинга сайта с капчей может быть несколько.
Парсинг при помощи Selenium. (Проверяем исходный код страницы на присутствие в ней капчи, если ключевые слова есть, то отправляем ее на решение)
Парсинг запросами requests + bs4. (Парсим фронт или бэк, когда получаем статус-код, говорящий об ошибке, вызываем Selenium, имитируя живой браузер, и отправляем капчу на решение)
К сожалению, обходить капчу, полностью используя запросы (requests + bs4), не всегда возможно, особенно с современными капчами от Google, Yandex и др.
Я покажу, как написать код с помощью первого алгоритма, но это в следующем шаге.