Обход капчи при парсинге в PHP
Итак, теперь вы знаете как устроена капча. Давайте теперь о том, как ее обойти. Для этого нужно сделать несколько запросов с помощью CURL.
Первый запрос должен слаться на файл с капчей. Куда его слать — видно в HTML коде формы или же можно отследить в отладчике, куда отправляются запросы.
Результатом данной операции будет картинка. Ее можно сохранить в файл с помощью file_put_contents . После этого капчу можно разобрать ее каким-либо образом (для начала вручную).
Запрос на капчу обязательно следует слать через CURL, а не file_get_contents , так как нам обязательно следует принимать и оправлять куки, ведь капча работает на сессиях PHP.
Итак, получаем капчу, сохраняем его в файл, разбираем эту капчу вручную и шлем второй запрос уже на страницу с формой вместе с POST данными для формы (и с разобранной капчей).
Не ошибитесь и не сделайте лишнего запроса к капче!
Обход капчи Яндекса средствами пхп
Пробую парсить выдачу Яндекса — получаю ввод капчи Как средствами пхп обойти?
На сайте с 19.05.2008
22 февраля 2010, 17:22
никак ты ее не обойдешь, задержки ставь при парсинге
На сайте с 08.06.2006
23 февраля 2010, 12:39
cadillac:
никак ты ее не обойдешь, задержки ставь при парсинге
позно уже задержки ставить! видит меня как робота как обойти?
На сайте с 17.11.2006
23 февраля 2010, 13:11
Использовать поиск, основанный на Я.XML.
На сайте с 28.10.2005
23 февраля 2010, 19:20
joost:
Пробую парсить выдачу Яндекса — получаю ввод капчи
Как средствами пхп обойти?
Распознавалку через antigate прикрутить
23 февраля 2010, 19:25
joost, диссертацию напиши по Pattern recognition, станешь миллионером
23 февраля 2010, 19:26
Unabashed:
Использовать поиск, основанный на Я.XML.
Верно, и менять IP 🙂
На сайте с 25.11.2009
24 февраля 2010, 09:51
А чем парсишь? может версию парсера нужно апдейтнуть.
список полезных сервисов для работы с ключевиками (http://blackpig.ru/keyword-tools/)
24 февраля 2010, 09:57
Такая же проблема, уже и ip менял, ниче не помогает 🙁
На сайте с 28.10.2005
24 февраля 2010, 16:47
Вручную попробывал прокликивать, через каждых пять страниц каптча; без распознавания никак или стопицот айпи
На сайте с 04.09.2009
24 февраля 2010, 19:31
12 запросов за 5 минут гарантировано не банит, с одного ip, само собой без использования XML. Я так понимаю самопис, не важно как много вы ранее делали запросов, банит на несколько часов, т.е. по истечении определенного времени все нормально будет. Делайте проверку, при получении качпи вырубайте скрипт. Для большого количества проверок по любому использовать XML, количество ip уже по необходимости.
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Как обойти капчу на Python?
Делаю парсер для одного сайта. При долгом парсинге, сайт выдает капчу.
Сначала я сделал так: добавил подмену User-Agent и IP (proxy) каждый раз, когда программа делает запрос на сайт. Но это не помогло.
Потом так: когда сайт дает на прохождение капчу, тогда остановить парсинг на 1 час и потом продолжить дальше. Это тоже не сработало.
Тогда я принял такое решение: открывать браузер со страницей где выскакивает капча с помощью Selenium, я буду сам проходить капчу, после этого программа останавливается на 10 минут, и продолжать работу дальше. Но и это не помогло.
Как можно обойти капчу, не используя сервисы по типу Антикапча, где нужно платить за каждую пройденную кем-то капчу?
Если что, для парсинга использую requests и beautifulsoup (ну, классика).
- Вопрос задан более трёх лет назад
- 13192 просмотра
Комментировать
Решения вопроса 2

Amigun @Amigun Автор вопроса
Если у вас возникла такая-же проблема как у меня, а именно капча при парсинге сайта, то прочитайте как я её решил.
Изначально я использовал библиотеки requests (для отправки запросов к сайту) и bs4 (для самого парсинга).
Сначала я сделал задержку, если программа встречает капчу, то она останавливает свою работу на 1 час, и дальше продолжает работать. Это не сработало, ни через час, ни через два, ни через 3 дня.
Дальше я думал подключить selenium, и когда выходит капча, открывать эту страничку с помощью selenium, там проходить капчу вручную, закрывать selenium, и пробовать через requests еще раз отправлять запросы на страницу. Капча все равно осталась.
Переписать парсер под selenium — без использования requests и bs4, хорошее решение, но не всегда подходит. В моем случае было слишком муторно использовать это, поэтому я обратился сюда.
Тут мне подсказали такой вариант: использовать сессии (requests.Session()) и очищать куки при смене IP (кстати да, я подключал библиотеки для смены IP через proxy, а так же библиотека для генерации fake-User-Agent) и передавать в заголовки параметр referer. Возможно это и работает, но не для меня. Капча все равно осталась.
Ну и вот собственно само решение 🙂
Я решил заменить библиотеку requests на selenium. Я через него подключался к сайту (у меня даже открывалось окно браузера) и с помощью метода page_source я получал html-код странички. Кстати, будьте внимательными, я так понял что с помощью этого метода можно получить только html, без js и css. Поэтому если сайт использует js для генерации контента, то у вас вряд-ли это получится. А потом, я просто с помощью bs4 парсил полученную html страничку, и извлекал из нее нужные мне данные. Да, капча все равно появлялась, но она появилась лишь однажды, я её вручную решил прямо через окно selenium, и можно сказать что я обошел капчу, так как она больше в процессе парсинга у меня не выскакивала.
Можете попробовать все описанные выше способы, может что и поможет. С каждым сайтом нужно извращаться по своему)
Обход капчи
А-Парсер не решает капчу самостоятельно. Для обхода капчи А-Парсер использует прокси и сервисы разгадывания капч.
В зависимости от вида каптчи поддерживается работа с такими онлайн сервисами:
И оффлайн ПО — XEvil, CapMonster.
Для работы с сервисами разгадывания капч А-Парсер имеет пять встроенных парсеров:
Util::AntiGate — разгадывает каптчи в виде картинок с надписями букв/цифр/слов
Util::ReCaptcha2 — разгадывает Google ReCaptcha v2
Util::ReCaptcha3 — разгадывает Google ReCaptcha v3
Util::hCaptcha — разгадывает каптчи hCaptcha
Util::Turnstile — разгадывает каптчи Cloudflare Turnstile
Важно понимать, что настройки распознавания капч задаются в отдельном парсере и затем используются в остальных. Т.е. настраиваем один парсер и используем его настройки как настройки для опции другого. Это даёт возможность иметь одновременно разные настройки для разных сервисов или программ разгадывания капч.
Далее будет описано как настроить каждый парсер для работы с сервисами разгадывания капч.
Настройка

Все парсеры для разгадывания каптч настраиваются аналогично, ниже показана настройка на примере Util::AntiGate .
Настройка пресета парсера каптчи

Открыть Настройки и далее открыть Настройки парсеров. Выбрать в выпадающем списке парсер Util::AntiGate .

- Выбрать нужный Provider.
- Парсер автоматически использует правильный url выбранного сервиса, но при необходимости его можно переопределить в поле Provider url.
- Если требуется выбранным сервисом, то ключ доступа можно указать в Client key.
После чего сохраняем настройки как новый пресет и вводим навание (в примере он назван My Work Captcha Solver).


Подключение к выбранному парсеру через переопределение
После настройки пресета парсера каптчи достаточно будет выбрать его через функцию переопределения.

Подключение к выбранному парсеру через пресет настроек

Переходим в Редактор заданий и выбираем парсер в котором будем использовать AntiGate, например SE::Yandex::WordStat .
Переходим в его настройки.

В настройках ниже в пункте Пресет AntiGate выбираем наш созданный ранее пресет (в примере он был назван My Work Captcha Solver).
Сохраняем все как новый пресет (в примере он назван Use My Work Captcha Solver).



Последним шагом нужно вернуться в Редактор заданий и выбрать последний созданный пресет с настроенным Антигейтом (в примере он был назван Use My Work Captcha Solver) для парсера SE::Yandex::WordStat .

Сервисы разгадывания
RuCaptcha
RuCaptcha поддерживает следующие типы каптч:
- Click CAPTCHA
- Rotate CAPTCHA
- reCAPTCHA (v2/v3/Invisible/Enterprise)
- KeyCAPTCHA
- Capy Puzzle CAPTCHA
- Cloudflare Turnstile
- Amazon CAPTCHA
- Audio CAPTCHA
- Arkose Labs CAPTCHA
- MTCaptcha
- DataDome CAPTCHA
- CyberSiARA CAPTCHA
- Yandex CAPTCHA
- VK CAPTCHA
Anti-Captcha
- Recaptcha V2
- Recaptcha V3
- FunCaptcha
- GeeTest
- Hcaptcha
- Turnstile
2captcha
2captcha поддерживает следующие типы каптч:
- Click CAPTCHA
- Rotate CAPTCHA
- reCAPTCHA V2
- reCAPTCHA V3
- KeyCAPTCHA
- GeeTest CAPTCHA
- hCaptcha
- FunCaptcha
- Capy Puzzle CAPTCHA
- Lemin CAPTCHA
- Cloudflare Turnstile
- Audio CAPTCHA
- Arkose Labs CAPTCHA
- Amazon CAPTCHA
- MTCaptcha
- DataDome CAPTCHA
- CyberSiARA CAPTCHA
CapMonster
CapMonster поддерживает следующие типы каптч:
- reCAPTCHA (v2, invisible, v3)
- и т.д.
CapMonster cloud
- reCAPTCHA v2
- reCAPTCHA v3
- reCAPTCHA Enterprise
- hCaptcha
- hCaptcha Enterprise
- FunCaptcha
- GeeTest
- Cloudflare Turnstile
- Cloudflare Bot Challenge
- Yandex SmartCaptcha
CapSolver
CapSolver поддерживает следующие типы каптч:
- reCAPTCHA (v2/v3/Enterprise)
- FunCaptcha
- DataDome
- Anti-bot Solution
- hCaptcha (Normal/Enterprise)
- Geetest v3 / v4
captchas.io
captchas.io поддерживает следующие типы каптч:
- reCAPTCHA (v2/v3/Invisible/Enterprise)
- Image CAPTCHA
- FunCAPTCHA
- GeeTest
- hCAPTCHA
- Cloudflare Turnstile
- Audio and Text CAPTCHAs
Captcha.Guru
- reCAPTCHA (v2/v3/Invisible)
- hCaptcha
- SmartCaptcha
- FunCaptcha
- ReCaptcha
- hCaptcha
- GeeTest
- Binance
- TikTok
- Amazon
White captcha
- SmartCaptcha от Яндекса
Capsola
Capsola поддерживает следующие типы каптч:
- SmartCaptcha click
Использование XEvil
⏩ Видео по настройке

Видео, в котором показано использование XEvil совместно с A-Parser для разгадывания Util::ReCaptcha2 :
В видео показано:
- подключение XEvil к A-Parser для работы с
Util::ReCaptcha2 - проверка работы и демонстрация работы в
SE::Google::Modern
Выбор желаемой нейросети
Начиная с XEvil 6.0 [ Beta-10 ] добавлена поддержка параметра corename, через который при отправке обычных капч (картинок) можно указывать желаемую нейросеть. Подробнее тут.

Передать данный параметр можно используя поле Дополнение к строке запроса парсера Util::AntiGate . Например, для нейросети Default v.1 нужно в данном поле написать corename=Default v.1