Python. Обходим каптчу (WebScrapping) [7]

Предисловие.

В результате кровавой войны между администраторами серверов и ботоводами, было придумано, воистину, ужасающие оружие, и имя ему — CAPTCHA. Однако, всегда есть решение.

И имя ему anti-captcha. Данный сервис отдает твою каптчу индусам, и они, решают её за копейки.

В этом уроке, мы реализуем авторизацию на ваксе.

Подготовка

Для обхода каптчи, нам потребуется аккаунт на anti-captcha, и пара долларов.

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

Пишем код.

Скопируйте себе следующий код:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time
import json

def acp_api_send_request(driver, message_type, data={}):
    message = {
        'receiver': 'antiCaptchaPlugin',
        'type': message_type,
        **data
    }
    return driver.execute_script("""
    return window.postMessage({});
    """.format(json.dumps(message)))
def allow_anticaptcha():
    #loading anticaptcha api
    print("Allow anticaptcha")
    api_anti_captcha_key = "your_anicaptcha_api_key"
    acp_api_send_request(
        driver,
        'setOptions',
        {'options': {'antiCaptchaApiKey': api_anti_captcha_key}}
    )
def pass_captcha_login():
    WebDriverWait(driver, 120).until(lambda x: x.find_element_by_css_selector('.antigate_solver.solved'))
    time.sleep(3)
    buttons = driver.find_elements_by_css_selector("button.button-secondary")
    for button in buttons:
        if button.text == "Login":
            button.click() #captcha solved
            break

option = webdriver.ChromeOptions()
option.add_extension('anticaptcha.zip')
driver = webdriver.Chrome('chromedriver.exe',chrome_options=option)

driver.get("https://wallet.wax.io/")
allow_anticaptcha()
time.sleep(10)
pass_captcha_login()

В данном примере, мы попробуем авторизироваться на ваксе. Большую часть кода, я брал отсюда.

Функция acp_api_send_request, посылает сообщение плагину, подробнее здесь.

Далее, allow_catcha() передает api_ключ плагину, что-бы он мог работать. Разумеется в этой строке

api_anti_captcha_key = "your_anicaptcha_api_key"

Ключ нужно заменить на свой. Получить его можно в личном кабинете. Данный ключ лучше никому не показывать.

Ждем 10 секунд

time.sleep(10)

Потом, pass_captcha_login() ждет решения каптчи, т.е. ждет появления элемента с классом ‘.antigate_solver.solved

Ожидания я разбирал здесь

WebDriverWait(driver, 120).until(lambda x: x.find_element_by_css_selector('.antigate_solver.solved'))

Ждет 3 секунды, на всякий случай.

time.sleep(3)

Ищет кнопку Login, и кликает по ней.

buttons = driver.find_elements_by_css_selector("button.button-secondary")
for button in buttons:
if button.text == "Login":
button.click() #captcha solved
break

Теперь, запустите скрипт, и сразу же начните заполнять поля логина и пароля. После решения каптчи, бот сам нажмет на кнопку Login.

Заключение.

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

Итоговый результат.

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!