-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathrecaptcha_callback.py
More file actions
62 lines (52 loc) · 2.34 KB
/
recaptcha_callback.py
File metadata and controls
62 lines (52 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import time
from python_rucaptcha.re_captcha import ReCaptcha
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from driver_chrome import ChromeBrowser
from loguru import logger
class CaptchaCallback:
def __init__(self, token: str):
self.driver = ChromeBrowser().get_driver()
self.token = token
def __get_sitekey(self) -> str:
iframe_src = self.driver.find_element(By.TAG_NAME, "iframe").get_attribute("src")
sitekey = iframe_src.split("k=")[1].split("&")[0]
logger.debug(sitekey)
return sitekey
def __solve_captcha(self) -> str:
recaptcha = ReCaptcha(
rucaptcha_key=self.token,
pageurl=self.driver.current_url,
googlekey=self.__get_sitekey(),
method='userrecaptcha'
)
result = recaptcha.captcha_handler()
result = result['captchaSolve']
logger.debug(result)
return result
def __calback(self, result: str):
symbols = 'QWERTYUIOPASDFGHJKLZXCVBNM'
for symbol in symbols:
try:
resp = self.driver.execute_script(f"return ___grecaptcha_cfg.clients['0']['{symbol}']['{symbol}']")
if 'callback' in resp:
self.driver.execute_script(
f"___grecaptcha_cfg.clients['0']['{symbol}']['{symbol}']['callback']('{result}')")
logger.success(f"Сегодня буква {symbol}")
break
except Exception:
pass
def login(self):
self.driver.get("https://visa.vfsglobal.com/mlt/ru/pol/login")
WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#g-recaptcha-response")))
result = self.__solve_captcha()
self.__calback(result)
self.driver.find_element(By.CSS_SELECTOR, "input[placeholder='jane.doe@email.com']").send_keys(
"test1@email.org")
self.driver.find_element(By.CSS_SELECTOR, "input[type='password']").send_keys("Pass123456!")
logger.success("finish")
time.sleep(100)
if __name__ == '__main__':
"""Получить токен можно здесь: https://rucaptcha.com/?from=7630153"""
CaptchaCallback(token='token').login()