Как обойти капчу (селениум)
Всем привет! Подскажите как обойти капчу на селениуме?
Сейчас использую плагин для браузера + сервис антикапчи, но это метод рабочий, если запускать драйвер в обычном режиме, в headless расширения не работают
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как из питон+селениум перейти в окно «Открыть» Windows
Есть WEB-страничка на которой имеется кнопка "Выбрать" при нажатии на которую появляется проводник.
Как обойти капчу при написании парсера на Selenium?
В общем пишу парсер на селениуме. При попытке открыть сайт вылезает капча. Причём сначала нужно.
Selenium. Селениум не может найти элемент в модальном окне. Как это исправить?
Приветствую. На странице Селениум нажимает на кнопку, после чего открывается модальное окно. Но.
Использую Селениум: как узнать адрес прокси-сервера, использованный при создании вебдрайвера?
У меня функция возвращает объект класса WebDriver. При этом я использую Хром. from.
![]()
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
Регистрация: 26.01.2020
Сообщений: 25
Пополнил там баланс, можешь плиз показать пример кода авторизации с сервисом?
![]()
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
на страницу, которую я послал есть все что нужно, для того, чтобы начать работать с сервисом
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Как обойти капчу?
На сайте есть капча, хочу обойти это программно, http://wmzona.com/gptr/signup.php?r=750600 , что.
Как обойти капчу на сайте
Всем привет сижу уже 2 день над капчей,вообщем проблема такова,часто вылазит капча на сайте ,какие.
Как обойти капчу с anticapcha?
Паршу сайт обменников bestchange, при заливе на свой хостинг ( хостинг.юа ) работает пол минуты.
Как обойти капчу с puppeteer
Как обойти капчу с помощью puppeteer? Я получаю данные страницы, в данном случае поиска яндекса.
Как обойти капчу Яндекса?
Сабж. Нужно автоматически добавлять сайты в Яндекса (и в блоги.яндекса), но капча сильно мешает :(.
2GIS выдаёт капчу, как её обойти?
Короче вот простой код который я запускаю это на пхп. $fpg=file_get_contents(urldecode(‘h.
Автокликер, обойти капчу
Привет. Помогите для данного кода <form name="withdraw" action="page.php?cat=captcha&p=send".
Решить reCAPTCHA 2 в Selenium (на Python)
Как решить любую капчу при помощи Selenium с использованием плагина AntiCaptcha. Установка Selenium, настройка, примеры API запросов к плагину. Код представлен на Питоне.
На этой странице представлена краткая информация о том, как при помощи Selenium и плагина AntiCaptcha решить любую капчу (в том числе reCAPTCHA v2, reCAPTCHA v3, Funcaptcha, Geetest и hCaptcha) в автоматическом режиме.
Мы пошагово установим Selenium на устройство и научимся подключать к нему наш плагин. Так же мы в автоматическом режиме решим Рекапчу на тестовом окружении.
Для тех, кто не знает, Selenium — инструмент автоматического запуска браузера и серфигнга в нем.
Тем же, кто уже знаком с Selenium предлагаем сразу посмотреть код примера по решению капчи.
Внимание! Для работы плагина необходим Anti-Captcha.com ключ учетной записи (Anti Captcha Api Key). Т.е. этот способ решения Рекапчи является платным. Но совсем не дорогим и очень удобным!
Больше информации о нашем расширении с примерами решения капч смотрите на главной странице AntiCaptcha плагина.
Тестовый код представлен на языке Python, так как он является самым популярным при использовании с Selenium.
Требуемый уровень компьютерной грамотности — средний.
В данной статье будут примеры исходного кода на языке Python, для понимания необходимо знание любого языка программирования и минимальный опыт работы с консолью.
Установка Python
Мы будем использовать Питон версии 3.
В интернете много информации по установке Питона, как текстовой, так и видео. Повторяться не будем, далее идут ссылки на самые удачные, на мой взгляд, инструкции по установке Питона:
Видео инструкция по установке Питона
Текстовая инструкция по установке Питона
В общем случае необходимо установить интерпретатор Питона (python) и прописать его в PATH, чтобы иметь возможность запускать его из консоли командой «python».
Установка Python — пояснения для Windows
На Windows 10 и более современных версиях есть возможность установить Python из Microsoft Store нажатием одной кнопки.
Если устанавливаете вручную, то рекомендуется поставить галочку «Add python.exe to Path» при установке. Тогда не придется каждый раз прописывать полный путь до python.exe и pip3.exe для их запуска. PIP — это Python Package Installer, т.е. менеджер пакетов для библиотек Python, который понадобится нам для установки Selenium.
Установка Python — пояснения для Linux
После установки на Linux системах у вас появится выполняемый файл python3, для Windows это будет просто python.exe (без тройки на конце).
У вас может автоматически не установиться менеджер пакетов PIP, если это так, то просто установите его из менеджера пакетов вашего дистрибутива. Пример для Ubuntu: sudo apt install python3-pip
Установка Selenium и WebDriver
Тут все немного сложнее. Помимо установки самого Selenium требуется инсталляция Веб Драйвера для браузера.
Это промежуточная прослойка между Selenium и браузером. Для каждого браузера ставится свой Веб Драйвер, но мы приводим пример для Хрома.
В интернетах много руководств по установке, они во многом схожи, но часто слишком избыточны и запутаны.
Поэтому привожу свою упрощенную версию, в надежде, что она будет полезна начинающим хацкерам.
Установка Selenium под Python
После установки Питона у Вас появится специальный питоновский пакетный менеджер (онлайн установщик библиотек из всей коллекции Питона) pip3.
Он и позволяет быстро поставить последнюю версию Селениума простой командой из консоли (Terminal или Cmd.exe). pip3 install selenium
Для Windows она будет выглядеть так: pip3.exe install selenium
В принципе это все.
Установку можно проверить запустив python3 или python.exe из командной консоли. И введя в терминале from selenium import webdriver
Если после выполнения этой команды не появилось никакой ошибки, значит Селениум установился правильно. Можно выходить из интерпретатора Питона, CTRL+D для Линукс и CTRL+Z —> Enter для Windows.
На Windows может возникнуть ошибка вида «pip3.exe не найден». Значит Питон при установке не прописался в переменную PATH.
Вернитесь к шагу установки Python и отметьте галочку «Add python.exe to Path». Гуглите, если не поможет.
Установка Web Driver
Еще раз, Web Driver — это дополнительная прослойка для общения с браузером.
Наглядно:
Python использует Selenium как библиотеку, вызывает ее объекты и методы.
Selenium подключается к Веб Драйверу какого-то конкретного указанного браузера (Хром, Фаерфокс, и т.д.)
Веб Драйвер открывает обычный браузер Chrome или Firefox, которыми мы пользуемся в повседневной жизни, и транслирует команды от Селениума в него. Соответственно сам браузер должен быть установлен Вами заранее (скорее всего это уже сделано, т.к. Вы читаете эту страницу через браузер).
Веб Драйвер фактически представляет из себя файл, например chromedriver для Хрома, или geckodriver для Фаерфокса. Который будет скормлен библиотеке Селениума при инициализации.
Так что по факту его установка сводится к скачиванию файла и складыванию его в нужное место.
Не забудьте выбрать версию Веб Драйвера аналогичную версии баузера, для которого Вы его устанавливаете (просто откройте свой браузер Chrome или Firefox — в завиимости от того каким браузером будете пользоваться — и проверьте там версию).
Например для Хрома версии 68 требуется драйвер именно 68-й версии.
Приведем ссылки с более подробной информацией по его установке:
Установка драйвера chromedriver для Chrome Selenium

- Узнайте Вашу версию chrome, скопировав в адресную строку: chrome://settings/help
- Запомните Вашу версию Chrome, в данном примере у нас 118-ая версия:
Остальные ссылки
Корректность установки проверяется в интерпретаторе Питона. Запустите python3 или python.exe из консоли и наберите в нем:
Для Windows: from selenium import webdriver from selenium.webdriver.chrome.service import Service browser = webdriver.Chrome(service=Service(‘C:\\mesto\\kuda\\skachali\\chromedriver.exe’))
Для Linux from selenium import webdriver from selenium.webdriver.chrome.service import Service browser = webdriver.Chrome(service=Service(‘/home/mesto/gde/lezit/chromedriver’))
Если не появляется никакого сообщения об ошибке и открывается окно браузера — значит установка прошла успешно.
Во многих туториалах рекомендуется прописать путь до скачанного Web Driver в переменную PATH. Или просто положить скачанный драйвер в один из путей PATH.
Тоже рекомендуем это сделать, это позволит не прописывать каждый раз путь до файла драйвера как в командах выше.
Ищите способы как это сделать для разных операционных систем в Интернете.
Решаем первую капчу в Selenium
Предварительно можете ознакомиться с примерами запуска браузера под Selenium по ссылкам ниже.
Мы же сосредоточимся на конкретном примере. Больше информации Вы сможете почерпнуть по тем же ссылкам или в Гугле.
Современная Веб-Автоматизация при Помощи Python и Selenium: Пробный запуск браузера
Python Selenium Getting Started
Предварительная установка и настройка плагина
Остановимся на одном моменте. Для работы плагина необходим Anti-Captcha.com ключ учетной записи (Anti Captcha Api Key).
Обычно он вручную выставляется в опциях плагина каждым нашим пользователем. При работе через Selenium такой возможности нет.
Для установки плагина и прописывания туда ключа существует два альтернативных способа. Мы рассмотрим оба варианта.
Скачивание плагина вручную и передача туда ключа с помощью API-сообщения
В первую очередь нам необходимо зайти на страницу скачки плагина для решения капчи, выбрать браузер, на котором мы будем решать капчу (Хром, Фаерфокс) и скачать соответствующие файлы с кодом плагина.
Для Chrome это будут CRX или ZIP. Для Firefox — XPI формат, может подойти и ZIP, но лучше все-таки XPI.
Скачанный файл требуется положить в какую-нибудь директорию проекта, далее в нашем скрипте мы будем прописывать до него полный путь.
Для установки ключа используется отправка API сообщений в плагин, а именно метод setOptions.
Метод acp_api_send_request в коде ниже как раз отправляет подобное сообщение.
Представленный ниже код снабжен комментариями на русском языке. Обратите внимание на вызов функции get_browser_with_plugin_ready: поменяйте там пути до файлов плагина и chromedriver‘а, а также пропишите свой ключ учётной записи Anti-Captcha.
# Импортируем необходимые объекты from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait import time import json # Метод отправки API запроса прямо в плагин # Например для инициализации API ключа сервиса anti-captcha.com, необходимый для работы плагина # Работает только на действующей HTML страничке, # в нашем случае на https://antcpt.com/blank.html # на страницах вроде about:blank запрос не пройдет def acp_api_send_request(driver, message_type, data=<>): message = < # всегда указывается именно этот получатель API сообщения 'receiver': 'antiCaptchaPlugin', # тип запроса, например setOptions 'type': message_type, # мерджим с дополнительными данными **data ># выполняем JS код на странице # а именно отправляем сообщение стандартным методом window.postMessage return driver.execute_script(«»» return window.postMessage(<>); «»».format(json.dumps(message))) def set_anti_captcha_api_key(browser, api_key: str): # Переходим на пустую страницу для выполнения API запроса к плагину browser.get(‘https://antcpt.com/blank.html’) # Устанавливаем API ключ anti-captcha.com # замените YOUR-ANTI-CAPTCHA-API-KEY на Ваш шестнадцатиричный ключ, который можно взять тут: # https://anti-captcha.com/clients/settings/apisetup acp_api_send_request( browser, ‘setOptions’, > ) # Три секунды паузы чтобы плагин проверил ключ на стороне anti-captcha.com time.sleep(3) def get_browser_with_plugin_ready(plugin_path: str, driver_path: str, api_key: str): # Инциируем объект опций для Хрома, чтобы иметь возможность подключить расширение options = webdriver.ChromeOptions() # Ссылка на CRX или ZIP файл плагина, который мы скачали ранее options.add_extension(plugin_path) # Создаём Браузер (Веб Драйвер Хрома) с указанием места куда скачался файл драйвера browser = webdriver.Chrome( service=Service(driver_path), options=options ) set_anti_captcha_api_key( browser=browser, api_key=api_key ) return browser browser = get_browser_with_plugin_ready( plugin_path=’./plugin.zip’, driver_path=’./chromedriver’, # внимание: на Windows должно заканчиваться на «.exe»! api_key=’ЗАМЕНИТЕ_НА_ВАШ_КЛЮЧ_ANTI-CAPTCHA_API’ )
Автоматическое скачивание плагина и прописывание ключа в конфиг-файле плагина
Для установки ключа используется способ подробно описанный ниже, но в данном случае плагин скачается автоматически и ключ туда тоже пропишется автоматически.
Представленный ниже код снабжен комментариями на русском языке. Обратите внимание на вызов функции get_browser_with_plugin_ready: поменяйте там путь до chromedriver‘а, а также пропишите свой ключ учётной записи Anti-Captcha.
# Импортируем необходимые объекты from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait import os import pathlib import urllib.request import zipfile def prepare_plugin(anti_captcha_api_key: str): current_script_dir = str(pathlib.Path(__file__).parent.resolve()) modified_plugin_path = current_script_dir + ‘/plugin_hardcoded_api_key.zip’ plugin_extract_path = current_script_dir + ‘/extracted_plugin’ # скачиваем плагин url = ‘https://antcpt.com/anticaptcha-plugin.zip’ filehandle, _ = urllib.request.urlretrieve(url) # распаковываем его with zipfile.ZipFile(filehandle, «r») as f: f.extractall(path=plugin_extract_path) # установить ключ API в файле конфигурации file = pathlib.Path(plugin_extract_path + ‘/js/config_ac_api_key.js’) file.write_text(file.read_text().replace( «antiCapthaPredefinedApiKey = »», «antiCapthaPredefinedApiKey = ‘<>‘».format(anti_captcha_api_key) )) # запакуйте директорию плагина обратно zip_file = zipfile.ZipFile(modified_plugin_path, ‘w’, zipfile.ZIP_DEFLATED) for root, dirs, files in os.walk(plugin_extract_path): for file in files: path = os.path.join(root, file) zip_file.write( path, arcname=path.replace(plugin_extract_path, »)) zip_file.close() return modified_plugin_path def get_browser_with_plugin_ready(driver_path: str, api_key: str): # Инциируем объект опций для Хрома, чтобы иметь возможность подключить расширение options = webdriver.ChromeOptions() # Для того что бы Selenium вернул контроль в наш код сразу после начала загрузки # страницы, иначе если на странице долго грузятся какие-то ресурсы, то контроль # не будет возвращён десятки секунд до полной загрузки страницы options.page_load_strategy = ‘none’ # плагин скачается автоматически и в него будет зашит Ваш ключ Анти-Капчи plugin_path = prepare_plugin(api_key) options.add_extension(plugin_path) # Создаём Браузер (Веб Драйвер Хрома) с указанием места куда скачался файл драйвера return webdriver.Chrome( service=Service(driver_path), options=options ) browser = get_browser_with_plugin_ready( driver_path=’./chromedriver’, # внимание: на Windows должно заканчиваться на «.exe»! api_key=’ЗАМЕНИТЕ_НА_ВАШ_КЛЮЧ_ANTI-CAPTCHA_API’ )
Открытие страницы с формой авторизации и капчей: решаем капчу и отправляем форму
На данном этапе у Вас уже есть объект browser, полученный одним из способов выше, с включенным туда плагином и прописанным ключём Anti-Captcha API. Теперь открываем тестовую форму авторизации, заполняем её и отправляем форму.
browser.get(‘https://anti-captcha.com/demo/?page=recaptcha_v2_textarea’) # ждём пока форма прогрузится и появится поле для ввода логина WebDriverWait(browser, 5).until(EC.visibility_of_element_located(( By.CSS_SELECTOR, ‘input[name=login]’ ))) # заполняем форму login_input = browser.find_element(By.CSS_SELECTOR, ‘input[name=login]’) login_input.send_keys(‘Test login’) password_input = browser.find_element(By.CSS_SELECTOR, ‘input[name=pass]’) password_input.send_keys(‘Test password’) # ждём пока рекапча автоматически решится плагином и на странице появится элемент .antigate_solver.solved WebDriverWait(browser, 120).until(EC.visibility_of_element_located(( By.CSS_SELECTOR, ‘.antigate_solver.solved’ ))) # отправляем форму browser.find_element(By.CSS_SELECTOR, ‘button’).click() # чтобы браузер не закрылся сразу и Вы успели посмотреть результат input()
Создайте файл с расширением .py, например test.py и скопируйте туда код из подраздела Автоматическое скачивание плагина и прописывание ключа в конфиг-файле плагина или из подраздела Скачивание плагина вручную и передача туда ключа с помощью API-сообщения, дополните его кодом из блока выше и запустите с помощью python3 (или python3.exe на Windows), Вы должны наглядно увидеть процесс заполнения формы и решения рекапчи:
Использование ProxyOn тасков
Если вы хотите пометить все свои задания на решение капчи как ProxyOn, как это описано в документации RecaptchaV2Task на anti-captcha.com . То вам необходимо добавить несколько новых строчек в блок установки опций setOptions. Необходимо установить натройки прокси тасков solveProxyOnTasks, userProxyProtocol, userProxyServer, userProxyPort и так далее. Больше информации по ним в секции setOptions API нашего плагина.
Теперь наш метод acp_api_send_request будет выглядеть следующим образом:
После выполнения этого запроса все следующие таски будут типа ProxyOn. Пожалуйста выставляйте только валидные настройки прокси, иначе вы получите ошибку прокси.
Запуск Selenium в headless-режиме (только для Linux)
Selenium Chrome можно запустить в headless-режиме из коробки, но к сожалению плагины в таком режиме не работают, так как Chrome не поддерживает автоматизацию с плагинами. Используйте утилиту Xvfb, которая предоставляет виртуальный дисплей для вашего приложения.
# устанавливаем пакет apt install -y xvfb # устанавливаем переменную дисплея export DISPLAY=:2 # запускаем сервер Xvfb в фоновом режиме (один раз) /usr/bin/Xvfb :2 -screen 2 1024x768x24 & # подождите немного чтобы дать ему запуститься (один раз) sleep 5 # добавьте префикс «xvfb-run» к python-скрипту xvfb-run python3 test.py
Способ явного прописывания ключа сервиса Антикапчи
По запросам наших пользователей мы реализовали альтернативный способ указания API ключа — через прописывание его в конфигурационном файле.
Для этого необходимо скачать код плагина в ZIP формате и распаковать этот архив. Внутри, в директории js вы найдете файл config_ac_api_key.js.
Откройте его в любом редакторе и в значение переменной antiCapthaPredefinedApiKey впишите ваш anti-captcha.com API ключ.
Например:
var antiCapthaPredefinedApiKey = ‘12345678901234567890123456789012’;
Обратите внимание, что помимо ключа в этом файле присутствует еще переменная defaultConfig, в которой перечислены значения всех опций плагина по умолчанию. Не стесняйтесь менять их по своему усмотрению, описание значения каждой конкретной опции можете подглядеть в статье по работе с API нашего плагина, в методе setOptions.
Разве что в статье имена опций представлены в camelCase, а в файле настроек через_подчеркивания (useRecaptchaPrecaching ~ use_recaptcha_precaching).
Последнее, что надо сделать — запаковать обратно весь код плагина в ZIP архив и указать путь именно до него в методе add_extension (смотрите выше наш файл captcha_solve.py).
Важно, в архив нужно помещать именно файлы расширения, а не директорию, в которых они лежат. Это обезопасит вас от ошибки «cannot process extension #1 from unknown error: cannot read manifest».
Обход ReCaptcha в Selenium тестах
ReCaptcha (она же всенародно любимая «капча») — одна из самых болезненных вещей, с которой может столкнуться автоматизатор тестирования на своём пути. В Сети гуляют тысячи разнообразных видео, записанных выходцами из солнечной Индии, касательно того, какими танцами с бубном возможно обмануть этого зверя. Действительно, достаточно сложно пытаться взаимодействовать с помощью запрограммированных скриптов со штукой, основная цель которой — убедиться что «вы не робот».
Очень важный дисклеймер: обмануть капчу невозможно.
Если вы уже столкнулись с этой проблемой, и читаете эту статью, пытаясь нагуглить рецепт панацеи, то знайте, что его не существует. Тем более, в вашей голове уже скорее всего возникли инновационные мысли о том, чтобы сымитировать реалистичное поведение пользователя с помощью WebDriver, путём рандомного mouse overing’а элементов, кликов по инпутам, и бережно расставленных Thread.sleep(). Абсолютно точно известно, что этот подход работать не будет, не тратьте свое время попусту.

Получается, выхода нет?
Не все так пессимистично. Иногда достаточно постараться дать себе наиболее точный ответ на вопрос «Какая задача передо мной стоит?» и посмотреть на ситуацию шире. В большинстве случаев, вы поймете, что ваша цель не обмануть капчу, а обойти её, чтобы протестировать функционал, спрятанный за ней. На примере своего кейса, я поделюсь с вами найденными мною вариантами решения поставленной задачи.
Контекст: мы интегрировали часть своего продукта внутрь стороннего сервиса, и хотели мониторить, все ли в порядке на их стороне, т.к. они не занимаются покрытием third-party частей своей платформы. Чтобы получить доступ к нашему функционалу, сперва необходимо было залогиниться. Тут-то я и встретился с капчей лицом к лицу. Далее привожу все перепробованные мною варианты обхода данной проблемы.
Нерабочие
Залогиниться через Google или Facebook
Помимо классической аутентификации, присутствовали каноничные «Login with Google / Facebook». Само собой, там точно также присутствовали свои «капчи», поэтому этот вариант не помог решить проблему.
Имитация поведения пользователя
Да, я тоже это пробовал. Было забавно, но чересчур наивно.
Рабочие
Chrome / Firefox Profiles
Поговорим о первом «живом» варианте. В драйверах для этих браузеров (chromedriver / geckodriver) реализована возможность загружаться под заранее заготовленным User Profile. Он хранит в себе все сохраненные пароли, куки, сессии, и даже историю браузера и закладки. Т.е. таким образом мы попросту пропускали абсолютно неважный для нашей задачи шаг логина, и таким образом попадали сразу на страницу с объектом тестирования. Реализуется это следующим образом:
- Создаем «чистый» профиль браузера
- Вручную вводим капчу и логинимся на нужный ресурс
- Копируем необходимый профиль в наш проект (HOWTO для Firefox и Chrome)
// Инициализируем профиль FirefoxProfile profile = new FirefoxProfile(new File("/путь/к/вашему/профилю")); // Указываем профиль в передаваемых опциях FirefoxOptions options = new FirefoxOptions(); options.setProfile(profile); // Создаем браузер WebDriver driver = new FirefoxDriver(options);
// Указываем профиль в передаваемых опциях ChromeOptions options = new ChromeOptions(); options.addArgument("--user-data-dir=/путь/к/папке/с/профилями"); options.addArgument("--profile-directory=Название_папки_с_нужным_профилем"); // Создаем браузер WebDriver driver = new ChromeDriver(options);
Этот подход хорошо показал себя при тестировании на локальной машине с установленным браузером и обычными gecko-/cromedriver’ами, но возникли проблемы при запуске на Jenkins. Мы поднимаем Selenium хаб и ноды внутри Kubernetes кластера, поэтому мы столкнулись с неприятностями в виде слишком долгого по времени маунта директории внутрь контейнера (чистый профиль в среднем весит около 25 MB, что немало), а так же некоторых проблем с CRUD правами браузера, который не мог вносить изменения в профайл в рантайме, и падал с “unknown error: failed to write prefs file” эксепшеном. Ко всему прочему, апдейтить профайл после достижения куками и сессиями своих Expiration Dates достаточно неудобно, да и не хотелось держать в проекте огромную папку с внутренностями профиля, поэтому в конечном итоге окончательным был выбран следующий вариант.
Cookies
“А ларчик просто открывался” — именно так можно было охарактеризовать ситуацию, после того, как мы просто добавили полученные вручную куки в драйвер. Алгоритм действий максимально прост и не зависит от выбранного браузера:
- Логинимся вручную
- Через Network смотрим Request Headers -> Cookie которые посылает наш браузер
// Создаем cookie private static final Cookie COOKIE = new Cookie("имя", "содержимое", "домен", "путь", new Date("дата")); // Создаем браузер WebDriver driver = new ChromeDriver(options); // Добавляем cookie в браузер driver.manage().addCookie(COOKIE);
Очевидный минус этого подхода — необходимость вручную менять куки после истечения их срока валидности. Но, в виду того что на тестируемой платформе этот срок составляет 3 месяца — мы и выбрали это решение.
А если мне не нужно логиниться?
А как же ситуация, когда речь идет не о авторизации и сессиях, а о совершении какого-либо одноразового действия (e.g. оформление заказа из корзины, регистрация нового пользователя и т.п.)? Здесь ситуация еще хуже. Два варианта которые я смог обнаружить, это:
- Договориться с вашими разработчиками о предоставлении вам некого workaround’а. Google предоставляет такую возможность, но помните, что вы осознанно делаете небольшую дыру в security.
- Воспользоваться сторонними платными сервисами, которые принимают с вашей стороны скриншот капчи, пытаются его декодировать, и отправляют вам расшифрованное значение. Сам я такой способ не пробовал и полностью рекомендовать его не могу.
Подведем итоги
Как вы могли убедиться — безвыходных ситуаций не бывает. Однако, будет глупо отрицать, что у абсолютно всех вышеперечисленных вариантов есть свои, достаточно весомые, минусы, так что выбор остается за вами.
Спасибо за внимание.
P.S. Если вы знаете еще какие-либо работающие в реальной жизни решения — пожалуйста, опишите их в комментариях, будет очень интересно почитать.
- Тестирование IT-систем
- Тестирование веб-сервисов
Как обойти капчу на selenium?

через какое-то время от начала скейпинга появляется капча и ни подмена ip, ни user-agent не помогает обойти
в похожем вопросе предлагают вручную решать капчу, но этот вариант мне не подходит
если ли способы автоматизированно обходить капчу на python?
- Вопрос задан более двух лет назад
- 3165 просмотров
2 комментария
Простой 2 комментария

Есть куча платных решений

Ася @asyaevloeva Автор вопроса
Lillipup, мне нужны идеи и способы как люди обходят капчу на пайтоне используя селениум, а не готовые платные решения
Решения вопроса 1
https://rucaptcha.com/demo/recaptcha-v2
Не бесплатно но довольно таки дешево есть апи и подробные инструкции
160 руб
За 1000 обычных капч
Ответ написан более двух лет назад
Нравится 1 25 комментариев

Ася @asyaevloeva Автор вопроса
меня интересуют именно методы обхода капчи (чтобы вообще с ней не сталкиваться), а не решение капчи (я смогу решить капчу на питоне но это в разы замедлит скрейпинг)
Ася, ну ты Ася)) кто тебе сказал, что такие методы вообще существуют? На то она и капча, чтобы их не было. Не считай себя самой хитрой Асей.

Ася, Убрать из всех заголовков намёки, что у вас используется автоматизация и вести себя максимально как пользователь — например предварительно посидеть на разных сайтах или в ютюбе.
А в общем случае — никак.

Ася, сомневаюсь что можно как-нибудь бесплатно автоматизировать решение Гугл капчи

Есть вариант совместить с OpenCV (машинное зрение). но там тоже не 100% вариант.
Т.е. сделать так, чтобы она «не вылазила» — не получится. а вот «разгадывать» с помощью выше перечисленной технологии вполне реально. но, как говорится, «овчинка выделки не стоит». хотя. смотря в каком случае. 🙂

P.S.: Как раз на «питоне» есть куски примеров. в гугле.
Ася, если бы рекапчу можно было обойти вот таким вопросом в хабр, я уверен, всех разработчиков рекапчи бы уволили в тот же день:)

Ася @asyaevloeva Автор вопроса
beem7, не то чтобы я очень хитрая, но способы явно существуют xD
мб использование какого-то другого search engine а не гугла как я сейчас делаю
то есть например когда я открываю Тор вручную и там вылетает капча то жму на «new identity» то через несколько таких обновлений капча исчезает (я просто хочу повторить то же самое на питоне)

Ася @asyaevloeva Автор вопроса
Василий Банников, то есть переходить на несколько ссылок до реквеста в гугл
Ася, тор меняет Ip браузер и отпечатки его

Ася @asyaevloeva Автор вопроса
Lillipup, ну лол если решение капчи можно автоматизировать платно, значит и бесплатно тоже пользуясь той же идеей

Ася @asyaevloeva Автор вопроса
N, да вот есть разные варианты но хочется именно избежать капчи а не разгадывать

Ася @asyaevloeva Автор вопроса
Roman Kitaev, и при этом куча сервисов умудряются ее обходить

Ася @asyaevloeva Автор вопроса
Fenix957, что значит «отпечатки»? как я могу то же самое на питоне менять?

Ася, как можно бесплатно найти кучу людей, которые будут решать за тебя капчу?
Ася, Самое лучшее что я нашел и пользуюсь сейчас gologin.com
Но он тоже платный)

Сергей Карбивничий @hottabxp Куратор тега Python
как можно бесплатно найти кучу людей, которые будут решать за тебя капчу?
Пусть своих одноклассников попросит, взамен на like их tiktok

Ася, ага. Называется «Сотня индусов на решают 10 капч за 5 центов»


Ася @asyaevloeva Автор вопроса
Fenix957, у них есть бесплатный пробный период, но конечно не знаю как это использовать в моих целях — ну то есть как запускать мой код на питоне с селениумом через этот браузер, а не через chrome/firefox профили

Ася @asyaevloeva Автор вопроса
Сергей Карбивничий, твоих одноклассников попрошу, сейчас только автоматизированную рассылочку им сделаю

Ася @asyaevloeva Автор вопроса

Василий Банников, вот судя по статье мне похоже помимо ip/user-agent/cookie нужно подменять еще оставшиеся элементы из списка чтобы не было капчи
Ася, это все как раз и делает сервис выше который я скинул
Они используют pupeeter
https://habr.com/ru/company/ruvds/blog/341348/
Почти тоже самое в некоторых местах даже проще
https://pypi.org/project/pyppeteer/

Ася @asyaevloeva Автор вопроса
Fenix957, отлично, попробую это, спасибо!!
Ася, В моем случает где профилей более 3к и они должны быть одинаковые все время нужно платить , в вашем случае если не ошибаюсь у них одни профиль вообще бесплатно.
Но сервис годный) Удачи)
Ответы на вопрос 1

Сергей Карбивничий @hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
В первую очередь нужно разобраться — что такое Selenium?
В первую очередь, Selenium WebDriver — это ПО для автоматического тестирования WEB приложений. Да, никто не запрещает его использовать для парсинга, и многие его используют. Но это уже вторичное его применение. В зависимости от сервера, к которому подключается WebDriver, на нем(на сервере) может быть установлено ПО, которое палит ПО(извините за тавтологию) для автоматизации. Замаскировать Selenium для крупных сайтов тяжело, а иногда и вовсе не возможно.
ни подмена ip, ни user-agent не помогает обойти
Существуют несколько сотен параметров, по которых идентифицируют клиента. Поэтому, если вы смените ip и user-agent — то отпечаток вашего браузера изменится на 0,0002%. Это как в серое море налить 100 гр. белой краски — от этого оно белым не станет.
Как обойти капчу на selenium?
Если не использовать сторонние сервисы, тогда примерно так:
1) Нанимаете математика (обязательно! А можно и двух).
2) Нанимаете программистов.
3) Закупаете дорогостоящие оборудование(основной упор на видеокарты)
4) Качаете файлик(пару ТБ думаю для начала достаточно) с картинками гидрантов, светофоров, лодок и т.д.
Profit! Математик(и) строит алгоритм для обучения сети, программисты переводят его в код на Python. Ну если вы знаете Python, тогда отлично, на программистах можно сэкономить.
Как не напороться на капчу:
Есть человек, который владеет официальной компанией по парсингу. Вот краткий пересказ его слов:
Они парсят все подряд, от мелких сайтов до Wildberries, Ozon и т.д. У них много серверов(vds), подключенные сервисы разгадывания капчи, прокси(ну тут я думаю и так понятно, что платные). При всем этом, они редко попадают на капчу. Алгоритм примерно следующий: парсеры запущены на многих серверах. Они получают задания. Каждый товар 1 парсер парсит из сайта раз в 9-25 секунд. При этом парсеры вместо того чтобы стать на паузу — не стают. В этот промежуток парсятся товары с другого сайта. В итоге парсеры работают без паузы круглые сутки, не нагружают сайты, и не попадают в поле зрения. То есть, они не долбят с одного сервера сайт по 200 запросов в секунду.
Ответ написан более двух лет назад

Ася @asyaevloeva Автор вопроса
В итоге парсеры работают без паузы круглые сутки, не нагружают сайты, и не попадают в поле зрения.
у меня задача парсить не один определенный сайт, а много одностраничных сайтов на которые я перехожу из гугла — и проблема именно на моменте открытия гугла наступает чтобы вводить туда запрос, поэтому я не нагружаю ничего, а просто пытаюсь открывать гугл без ввода капчи (но пока не выходит, через 20-30 таких запросов начинается капча)
Как обойти капчу на selenium?
Если не использовать сторонние сервисы, тогда примерно так:
1) Нанимаете математика (обязательно! А можно и двух).
2) Нанимаете программистов.
3) Закупаете дорогостоящие оборудование(основной упор на видеокарты)
4) Качаете файлик(пару ТБ думаю для начала достаточно) с картинками гидрантов, светофоров, лодок и т.д.
Profit! Математик(и) строит алгоритм для обучения сети, программисты переводят его в код на Python. Ну если вы знаете Python, тогда отлично, на программистах можно сэкономить.
у меня все это есть, я ML программистка и как я уже сказала меня больше интересует вариант не разгадывания капчи а ее обход
и не вижу как тут особо математика нужна

Сергей Карбивничий @hottabxp Куратор тега Python
а много одностраничных сайтов на которые я перехожу из гугла

А, ну тогда ясно. Гугл как раз первый, кто палит selenium. Например, он не дает зайти в свой аккаунт с помощью selenium.
Наилучшим решением будет написать расширение на js для реального браузера, и из него уже управлять реальным браузером.

Ася @asyaevloeva Автор вопроса
Сергей Карбивничий, я не думаю что используя реальный браузер что-то изменится, там же все равно отпечаток браузера будет один и тот же и через какое-то количество запросов гугл снова подумает что что-то не так и начнет выдавать капчу

А, ну тогда ясно. Гугл как раз первый, кто палит selenium. Например, он не дает зайти в свой аккаунт с помощью selenium.
