В этой статье подробно обсуждается использование библиотеки Selenium для операций автоматизации веб-страниц и объединение ее со службой 2Captcha для взлома кода проверки ReCAPTCHA. Содержание охватывает базовые знания Selenium, классификацию кодов проверки, использование службы 2Captcha и подробные объяснения на примерах. Наконец, он обобщает и оптимизирует практику, предоставляя читателям полную практическую схему взлома кодов проверки.
В современной веб-разработке автоматизированное тестирование и сканирование веб-страниц являются очень распространенными задачами. В обеих областях Selenium является широко используемым инструментом, который может имитировать операции браузера, а также управлять и анализировать веб-страницы. В этой статье мы сначала познакомим вас с основами Selenium, а затем подробно рассмотрим, как его использовать для решения еще одной распространенной веб-проблемы: кода проверки.
Selenium — это инструмент автоматического тестирования, который в основном используется для функционального тестирования и тестирования производительности веб-приложений. Он может работать непосредственно в браузере и поддерживает несколько операционных систем, браузеров и языков программирования. Помимо тестирования, Selenium также часто используется в веб-сканерах для моделирования и автоматизации операций браузера.
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.python.org')
assert "Python" in driver.title
driver.quit()
Приведенный выше код Python показывает простой сценарий Selenium, который запускает браузер Firefox, затем посещает официальный веб-сайт Python и проверяет, содержит ли заголовок страницы слово «Python». Наконец, закройте браузер.
Код проверки, полное название которого — «Полностью автоматизированный общедоступный тест Тьюринга для различия компьютеров и людей», представляет собой общедоступный полностью автоматизированный тест Тьюринга, используемый для определения того, является ли пользователь машиной или человеком. Основная цель — предотвратить преследование вредоносных программ и автоматизированных сценариев, злоупотребление службой или участие в другом нежелательном поведении.
Общие типы кодов проверки включают текстовый код проверки, графический код проверки, скользящий код проверки, код сенсорной проверки и т. д. В последнее время, с развитием технологий машинного обучения, таких как система Google ReCAPTCHA, она предоставляет услуги кода проверки на основе анализа поведения пользователей, что значительно увеличивает сложность взлома.
В следующей статье мы сосредоточимся на том, как использовать Selenium для обработки этих кодов проверки, особенно графических кодов проверки и кодов проверки ReCAPTCHA.
Selenium — это инструмент автоматического тестирования, в основном используемый для функционального тестирования веб-приложений. Он может имитировать реальное поведение пользователя, например нажатие кнопок, ввод текста, выбор раскрывающихся меню и многое другое. Поэтому Selenium часто используется в веб-сканерах для обработки страниц, отображаемых с помощью JavaScript, или моделирования поведения пользователя.
Сначала нам нужно установить Selenium на нашу машину. Ниже приведены команды для установки Selenium в среде Python:
pip install selenium
Затем нам также необходимо загрузить соответствующий драйвер браузера. Например, драйвер Chrome — chromedriver. Адрес загрузки драйвера обычно можно найти на официальном сайте браузера.
WebDriver — это основная часть Selenium. Это интерфейс, определяющий ряд методов работы браузера. Каждый браузер имеет собственную реализацию WebDriver, например ChromeDriver, FirefoxDriver и т. д.
Ниже приведен простой пример, показывающий, как использовать WebDriver для открытия веб-страницы:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.google.com/')
Приведенный выше код сначала создает экземпляр FirefoxDriver.,а затем назвал егоget
метод открытGoogleДомашняя страница。
Selenium предоставляет множество методов для поиска элементов страницы, например, по идентификатору, имени, имени класса, имени тега, тексту ссылки, частичному тексту ссылки, xpath, селектору CSS и т. д.
Вот несколько примеров позиционированных элементов:
element = driver.find_element_by_id('id_of_element') # Найти по идентификатору
element = driver.find_element_by_name('name_of_element') # Должность по имени
element = driver.find_element_by_class_name('class_of_element') # по классу позиционирование имени
element = driver.find_element_by_tag_name('tag_of_element') # по тегу позиционирование имени
element = driver.find_element_by_xpath('//div[@class="my_class"]') # Найти через XPath
element = driver.find_element_by_css_selector('div.my_class') # через CSS положение селектора
Получив элемент страницы, мы можем с ним работать. Общие операции включают ввод текста, нажатие кнопок, получение текста элемента и т. д.
Вот несколько примеров элементов действия:
element.send_keys('some text') # Введите текст
element.click() # щелкните элемент
text = element.text # Получить текст элемента
При работе с веб-сканерами мы часто сталкиваемся с ситуациями, когда нам нужно дождаться загрузки страницы. Selenium предоставляет два метода ожидания: явное ожидание и неявное ожидание.
Вот пример явного ожидания:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'id_of_element'))
)
Приведенный выше код будет ждать до 10 секунд, пока на странице не появится элемент с идентификатором «id_of_element».
Selenium также поддерживает некоторые расширенные операции, такие как выполнение кода JavaScript, работа с файлами cookie, переключение iframe, обработка всплывающих окон и т. д.
Ниже приведен пример выполнения кода JavaScript:
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
Приведенный выше код выполняет сценарий JavaScript, который прокручивает страницу вниз. Это очень полезно при работе с веб-страницами, требующими прокрутки.
CAPTCHA — это повсеместный механизм безопасности в онлайн-мире, используемый для различения пользователей-людей и машин. Здесь мы объединим Selenium и решение для автоматического кода проверки (TwoCaptcha), чтобы показать, как взломать общий код проверки — ReCAPTCHA.
2Captcha — это сервис идентификации проверочных кодов, основанный на человеческом труде. Он предоставляет интерфейс API, который позволяет разработчикам отправлять нераспознанные коды проверки в службу 2Captcha. Затем сотрудники 2Captcha вручную идентифицируют и возвращают результаты. Этот сервис отличается высокой точностью обработки сложных проверочных кодов, таких как коды проверки изображений, reCAPTCHA и FunCaptcha. Основными преимуществами 2Captcha являются ее превосходная точность и гибкий API, которые позволяют разработчикам легко интегрировать и использовать ее в разных средах.
ReCAPTCHA — это служба кодов подтверждения, запущенная Google. Ее основная функция — предоставить пользователям возможность щелкнуть флажок «Я не робот». После того, как пользователь нажмет, ReCAPTCHA оценит поведение пользователя, чтобы определить, является ли он человеком. Если пользователь определен как человек, проверка проходит; если нет, то дается дополнительное задание, например, выбор изображения, на котором что-то содержится.
Мы можем использовать Selenium для имитации того, как пользователь нажимает флажок «Я не робот». В Селене,мы можем использоватьclick
Метод имитации щелчка,Например:
checkbox = driver.find_element_by_id('recaptcha_check')
checkbox.click()
Однако этого может быть недостаточно, поскольку ReCAPTCHA анализирует поведение пользователей. Например, если щелчок слишком быстрый или роботизированный, ReCAPTCHA может расценить это как поведение машины.
Если ReCAPTCHA создает дополнительные проблемы, нам нужно использовать другие инструменты для их решения. Здесь мы решили использовать TwoCaptcha — сервис, который может автоматически решать различные коды проверки.
В TwoCaptcha нам нужно указать URL-адрес веб-сайта и ключ сайта, после чего он вернет ответ для решения кода подтверждения. Мы можем ввести этот ответ обратно на веб-страницу, чтобы завершить проверку.
Вот пример кода для использования TwoCaptcha для решения капчи:
solver = TwoCaptcha(API_KEY)
result = solver.recaptcha(sitekey=sitekey, url=url)
С помощью Selenium и TwoCaptcha мы можем объединить их в комплексное решение. Конкретные шаги заключаются в следующем:
Следующий код реализует описанные выше шаги:
from bs4 import BeautifulSoup
from twocaptcha import TwoCaptcha
from selenium import webdriver
API_KEY = 'your_twocaptcha_api_key'
solver = TwoCaptcha(API_KEY)
# Создайте экземпляр WebDriver
driver = webdriver.Firefox()
# Откройте веб-страницу с помощью Selenium
driver.get('https://www.example.com/')
# Найдите и установите флажок «Я не робот».
checkbox = driver.find_element_by_id('recaptcha_check')
checkbox.click()
# Если возникнут дополнительные проблемы, используйте TwoCaptcha для их решения.
sitekey = 'sitekey_from_webpage'
url = driver.current_url
result = solver.recaptcha(sitekey=sitekey, url=url)
# Введите ответ обратно на веб-страницу
driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML="{}"'.format(result['code']))
Selenium в сочетании с 2Captcha автоматически заполняет проанализированный проверочный код. Мы можем использовать Selenium, чтобы найти поле ввода кода проверки и заполнить результаты анализа.
# Нацеливание на Проверочный с помощью Selenium поле ввода кода
input_box = driver.find_element_by_id('captcha-input-box-id')
# Заполняем разобранный Проверочный код
input_box.send_keys(captcha_solution)
Для кодов проверки изображений мы можем использовать Selenium для получения элементов изображения и сохранения их в виде локальных файлов. Затем мы можем загрузить локальный файл в 2Captcha для анализа.
# Найдите элемент изображения
image_element = driver.find_element_by_id('captcha-image-id')
# Сохранить изображение как локальный файл
image_element.screenshot('captcha.png')
# Загрузить в TwoCaptcha для анализа
solver = TwoCaptcha(API_KEY)
result = solver.normal('captcha.png')
# Заполняем разобранный Проверочный код
input_box = driver.find_element_by_id('captcha-input-box-id')
input_box.send_keys(result)
Помимо упомянутых выше типов проверочных кодов, существуют и другие типы проверочных кодов, такие как текстовая CAPTCHA, reCaptcha V2, reCaptcha V3, HCaptcha, Funcaptcha, и сервис 2Captcha может хорошо их решить.
Из этой статьи мы узнали, как использовать библиотеку Selenium для имитации операций браузера и объединить ее со службой TwoCaptcha для автоматического взлома кода проверки ReCAPTCHA. Теперь давайте подведем итоги нашей практики и выскажем некоторые мысли о возможных будущих оптимизациях.
С помощью Selenium мы можем выполнять в браузере различные сложные элементы управления: от открытия веб-страниц, заполнения форм до имитации кликов и так далее. Однако когда мы сталкиваемся с такими проблемами, как CAPTCHA, требующими участия человека, нам нужно искать дополнительные решения.
2Captcha предлагает отличное решение. Он может решать различные типы CAPTCHA, включая ReCAPTCHA, о котором мы упоминали в этой статье. Более того, API, предоставляемый 2Captcha, позволяет нам легко интегрировать его в наши сценарии Selenium.