Предисловие.
В результате кровавой войны между администраторами серверов и ботоводами, было придумано, воистину, ужасающие оружие, и имя ему — 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.
Заключение.
В данном примере, у нас получилось реализовать авторизацию на ваксе, с помощью анти-каптчи. Это хороший пример, но практической пользы от него мало, т.к. на ваксе можно авторизоваться и без каптчи (через гугл или реддит).