Как решать капчу в Make.com без шага с кодом

make.com captcha - How to Solve CAPTCHA in Make.com Without a Code Step

Шаг с капчей в Make.com состоит из трёх модулей HTTP и одного Sleep, и кода в сценарии нет вообще. Отправьте задание, подождите, опрашивайте, пока не вернётся токен, затем отправьте его вместе с формой. По-настоящему людей останавливает не цикл, а адрес: сценарий выполняется в собственном облаке Make.com, поэтому 127.0.0.1 там означает контейнер Make.com, а не ваш рабочий стол, и модуль HTTP обратится только к HTTPS-адресу с сертификатом, которому он доверяет. Разберитесь с адресом, и на остальное уйдёт пятнадцать минут кликов.

Что понадобится

  • Аккаунт Make.com на любом тарифе. Все используемые здесь модули входят во встроенные приложения HTTP, Tools и Flow control.
  • Запущенный CapSkip в режиме Server на подконтрольной вам машине с Windows, доступной из интернета.
  • Имя хоста, указывающее на эту машину, и публично доверенный TLS-сертификат для него.
  • URL страницы с защищённой формой и её sitekey.

Оба режима, Local и Server, описаны в разделе Настройки подключения. Режим Local подходит тогда, когда ваша автоматизация и решатель находятся на одной машине, а именно этого облачный сценарий сделать не может.

Почему адрес обратной петли здесь не вариант

Сценарии Make.com выполняются в инфраструктуре Make.com, в одной из четырёх зон. Ваш аккаунт живёт на us1, us2, eu1 или eu2, и каждый исходящий запрос уходит с опубликованных исходящих адресов этой зоны. Ничто на этом пути не касается вашей сети, поэтому запрос к 127.0.0.1 разрешается внутри контейнера, где выполняется ваш сценарий, и не находит там ничего слушающего.

Ответом здесь служит режим Server, и это не какой-то другой продукт. Решатель по-прежнему работает на вашем железе, по-прежнему решает капчу без платы за каждое решение и по-прежнему отдаёт те же 2captcha-совместимые эндпоинты. Меняется интерфейс, к которому он привязывается: вместо того чтобы отвечать только локальному устройству, он отвечает на вашем сетевом или публичном IP, поэтому обратиться к нему может всё, у чего есть адрес и ключ. Статический публичный IP не даёт этому адресу уплыть у вас из-под ног.

Этот опубликованный список исходящих адресов полезен и в обратную сторону. Make.com документирует исходящие адреса по зонам, поэтому вы можете пропускать через файрвол к порту решателя только адреса своей зоны, а всё остальное отбрасывать. Входящие адреса на стороне Make.com динамические и не публикуются, так что не пытайтесь их зафиксировать.

Дайте решателю адрес, который примет Make.com

Именно на этом требовании спотыкаются все, и его стоит прочитать дважды. Модуль HTTP описывает своё поле URL как HTTPS-эндпоинт и отклоняет сертификаты, которые не может проверить. Самоподписанного сертификата недостаточно, как недостаточно и голого IP-адреса на порту 8080 по обычному HTTP.

Поэтому поставьте перед решателем TLS-терминатор. На Windows короче всего путь через Caddy: он сам запрашивает и продлевает настоящий сертификат, а вся конфигурация умещается в одну команду. Сначала направьте имя хоста на машину, потом запускайте.

# Fronts CapSkip on 8080 with a real certificate for the hostname.
# Ports 80 and 443 must reach this machine for the challenge.
caddy reverse-proxy --from solver.example.com --to 127.0.0.1:8080

Проверьте это со своей машины, прежде чем трогать Make.com. Если curl доволен сертификатом, сценарий тоже будет доволен, а вы только что вдвое сократили площадь для отладки.

# Submit a reCAPTCHA v2 job. json=1 makes the reply JSON.
curl -s "https://solver.example.com/in.php" \
  -d "key=YOUR_API_KEY" \
  -d "method=userrecaptcha" \
  -d "googlekey=YOUR_SITEKEY" \
  -d "pageurl=https://example.com/page-with-recaptcha" \
  -d "json=1"

# {"status":1,"request":"2122988149"}

Шаг 1: отправляем капчу

Добавьте модуль HTTP и выберите действие, которое выполняет запрос. Укажите метод POST и адрес эндпоинта in.php вашего решателя. Выберите тип тела URL-encoded и добавьте пять полей, те же самые пять, что отправляет приведённый выше вызов curl: ключ, имя метода, sitekey, URL страницы и флаг JSON.

Включите опцию, которая разбирает ответ. Без неё ответ приходит одной строкой, и вытащить из неё что-либо для маппинга не получится. С ней вы получаете значение status и значение request, а значение request при успешной отправке содержит идентификатор задачи.

Тип капчи выбирается именно именем метода. Используйте userrecaptcha для reCAPTCHA v2, добавляя version=v3 для v3, turnstile для Cloudflare Turnstile, geetest для GeeTest v3 и base64 для графической капчи, передаваемой прямо в запросе. Полный список параметров для каждого из них есть в документации CapSkip API.

Шаг 2: подождите перед опросом

Добавьте модуль Sleep из приложения Tools. Решение reCAPTCHA v2 обычно занимает от пятнадцати до сорока пяти секунд, поэтому опрос сразу же лишь потратит операцию на ответ о том, что результат ещё не готов. Для первого ожидания разумно взять двадцать секунд.

Sleep задерживает сценарий не более чем на 300 секунд, то есть на пять минут, и именно из-за этого потолка следующий шаг представляет собой цикл, а не одну длинную паузу. Этого с запасом хватает на одно решение, но просидеть так неизвестное число повторных попыток не выйдет.

Шаг 3: опрашивайте, пока не придёт токен

В Make.com нет модуля ожидания по условию, поэтому опрос собирается из Repeater и фильтра. Repeater живёт в приложении Flow control и работает как генератор бандлов: задайте ему начальное значение и число повторов, и он выдаст столько же бандлов, в каждом из которых будет счётчик с именем i. Всё, что стоит после него, выполняется по одному разу на бандл, и это и есть тело вашего цикла.

Поставьте число повторов равным десяти. За Repeater поместите второй Sleep на пять секунд и второй модуль HTTP, который обращается к res.php с идентификатором задачи из шага 1.

# The poll. Same key, the id from the submit, action=get.
curl -s "https://solver.example.com/res.php?key=YOUR_API_KEY&action=get&id=2122988149&json=1"

# Still working:
# {"status":0,"request":"CAPCHA_NOT_READY"}
#
# Done:
# {"status":1,"request":"03AGdBq24PBCbwiDR..."}

Теперь добавьте фильтр на связь, выходящую из этого модуля, и пропускайте бандлы только тогда, когда status равен 1. Благодаря этому всё, что идёт после фильтра, выполняется ровно один раз, на удачном опросе, и ни одна другая попытка дальше не проходит. Стоит чётко понимать, что это даёт, а чего не даёт. Repeater всё равно выдаёт все бандлы, которые вы у него запросили, поэтому цикл раньше времени не заканчивается; раньше заканчивается ожидание, потому что токен идёт дальше в тот же момент, когда его находит очередной опрос. Токен лежит в значении request этого бандла.

Одно свойство API определяет всю эту конструкцию, и его легко упустить. Результат читается только один раз, поэтому токен вам отдаст только первый удачный опрос и никакой другой. Сразу передавайте его в маппинге дальше, а не вызывайте res.php второй раз, чтобы получить его снова.

Одна и та же связка отправки и опроса встречается в любом no-code инструменте, а все различия сводятся к тому, что накладывает вокруг неё платформа. Вариант этого потока для собственного хостинга, где автоматизация и решатель могут жить на одной машине, подробно описан в руководстве по решению капчи в n8n. А про платформу, где форму задаёт потолок времени выполнения шага, а не потолок Sleep, рассказывает пошаговый разбор Zapier.

Во сколько операций обходится цикл

Make.com берёт плату за операции, и за одну операцию считается один запуск модуля на одном бандле. Триггер засчитывается один раз, сколько бы он ни вернул, но каждый модуль за Repeater выполняется по разу на бандл, поэтому десять повторов Sleep плюс вызов HTTP дают двадцать операций, даже если токен приходит со второй попытки. Фильтр не останавливает цикл, он лишь не пускает бандлы дальше себя.

Это число фиксированное, а не типичное, и именно поэтому две привычки ниже стоит завести. Сделайте первый Sleep достаточно длинным, чтобы ответ обычно был готов уже к первому или второму опросу, потому что только это и позволяет вообще держать небольшое число повторов. И задавайте число повторов под реалистичный худший случай, а не под удобный: десять повторов по пять секунд добавляют пятьдесят секунд сверх начального ожидания, и для v2 этого более чем достаточно.

Само решение капчи не тарифицируется вообще. CapSkip работает на вашей собственной машине, поэтому повторная попытка стоит вам только тех операций, которые Make.com засчитает за выполнившие её модули.

Шаг 4: отправьте токен вместе с формой

Что делать с токеном, зависит от цели. Если вы отправляете форму, добавьте третий модуль HTTP и передайте токен в поле g-recaptcha-response рядом с настоящими полями формы. Для Turnstile поле называется cf-turnstile-response, и решатель дополнительно возвращает использованный им user agent, который страница проверки обязательно захочет увидеть в заголовках запроса.

Токены истекают, и для reCAPTCHA v2 окно составляет около двух минут с момента, когда решение получено. Поставьте модуль отправки сразу за фильтром. Всё медленное, вроде выборки записи или сборки полезной нагрузки, должно стоять до решения капчи, а не между решением и отправкой. Оба способа отправки и тайминги разобраны на странице сервиса распознавания reCAPTCHA v2.

Частые ошибки и что они означают

Что вы видитеПричинаИсправить
Ошибка соединения на первом модулеРешатель находится на адресе обратной петли или в приватной сетиПереключите CapSkip в режим Server и используйте публичное имя хоста
Ошибка сертификата или TLSСамоподписанный сертификат или обычный HTTPПоставьте перед решателем публично доверенный сертификат
Ответ приходит одной неразобранной строкойНа модуле HTTP выключена опция разбора ответаВключите её, затем заново настройте маппинг полей
ERROR_WRONG_USER_KEYПоле key пустое или заполнено неверноПроверьте значение, подставленное в запрос
ERROR_GOOGLEKEYДо решателя дошёл пустой или неверный sitekeyСчитайте sitekey с живой страницы заново
CAPCHA_NOT_READY на каждом повтореЦикл короче, чем длится решениеУвеличьте первый Sleep или добавьте повторов
Второй опрос возвращается без токенаРезультат читается только один разЗабирайте его в маппинг на удачном опросе и не запрашивайте повторно
Форма отклоняет токен, который выглядит нормальнымОн истёк до того, как выполнилась отправкаПеренесите медленные модули до решения капчи

FAQ

Может ли сценарий достучаться до решателя на 127.0.0.1?

Make.com существует только как облачный продукт, self-hosted-редакции у него нет, поэтому адрес обратной петли в сценарии никогда не бывает вашим. Если ваша автоматизация действительно работает на той же машине, что и решатель, то вы описываете другой инструмент. Self-hosted-экземпляр n8n держит трафик на локальном устройстве, и то же самое делает скрипт, написанный под один из CapSkip SDKs.

Безопасно ли выставлять решатель в интернет?

Да, если сузить круг тех, кто может до него достучаться. Включите проверку ключа, чтобы неавторизованный запрос отклонялся, выдайте сценарию собственный ключ, чтобы отзывать его отдельно, и ограничьте правило файрвола опубликованными исходящими адресами вашей зоны Make.com. Благодаря TLS-терминатору перед ним ключ никогда не идёт по сети в открытом виде.

Почему не сделать один длинный Sleep вместо цикла?

Потому что один Sleep упирается в 300 секунд и потому что вы будете гадать. Фиксированное ожидание либо каждый раз впустую тратит время, либо на медленных прогонах остаётся ни с чем, и второй попытки оно вам не даёт ни в том, ни в другом случае. Repeater даёт как раз повторные попытки, и токен доходит до модуля отправки в тот же момент, когда его находит очередной опрос, обычно второй. Сам цикл всё равно отрабатывает своё число повторов, так что покупаете вы этим надёжность, а не меньший счёт.

Нужен ли сценарию прокси для решения капчи?

Обычно нет. Поддержка прокси есть для reCAPTCHA, Turnstile и GeeTest, и она важна, когда целевой сайт привязывает токен к тому IP, с которого он будет отправлен. Графические капчи прокси не принимают вообще. Параметры прокси добавляйте в первый модуль HTTP, тот, который обращается к in.php, и только если видите, что токены отклоняются, хотя и приходят вовремя.

Коротко

Переведите CapSkip в режим Server, поставьте перед ним имя хоста и доверенный сертификат, а затем соберите в сценарии четыре вещи: отправку по HTTP, Sleep, Repeater со Sleep и HTTP-опросом за ним и фильтр, который пропускает только готовый результат. Шаг с кодом не нужен ни на одном этапе. Тот же поток сворачивается в один вызов на Python, Node.js, PHP или C#, и каждый из них показан на странице SDK от CapSkip.

Это стоит знать, прежде чем масштабировать сценарий. Поскольку CapSkip выполняет распознавание капчи на оборудовании, которым вы уже владеете, число решений никогда не появляется в счёте. С объёмом растёт только количество операций, которые Make.com считает за модули вокруг него.