diff --git a/.gitignore b/.gitignore index ee8198e9..3797d201 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ custom_code.json last_commit.txt __pycache__/ .vscode/settings.json +bin/ +lib/abi diff --git a/lib/librecaptcha/recaptcha.py b/lib/librecaptcha/recaptcha.py index 7eacbde3..e335a303 100644 --- a/lib/librecaptcha/recaptcha.py +++ b/lib/librecaptcha/recaptcha.py @@ -38,13 +38,17 @@ import time BASE_URL = "https://www.google.com/recaptcha/api2/" API_JS_URL = "https://www.google.com/recaptcha/api.js" JS_URL_TEMPLATE = """\ -https://www.gstatic.com/recaptcha/releases/{}/recaptcha__en.js +https://www.gstatic.com/recaptcha/releases/{}/recaptcha__{}.js """[:-1] STRINGS_VERSION = "0.1.0" STRINGS_PATH = os.path.join( os.path.expanduser("~"), ".cache", "librecaptcha", "cached-strings", ) +CHALLENGE_GOAL_TEXT = { + 'en': 'select all', + 'it': 'seleziona tutti' +} DYNAMIC_SELECT_DELAY = 4.5 # seconds FIND_GOAL_SEARCH_DISTANCE = 10 @@ -122,7 +126,7 @@ def get_rresp(uvresp): return None -def get_js_strings(user_agent: str, rc_version: str) -> List[str]: +def get_js_strings(user_agent: str, rc_version: str, lang : str = 'en') -> List[str]: def get_json(): with open(STRINGS_PATH) as f: version, text = f.read().split("\n", 1) @@ -136,7 +140,7 @@ def get_js_strings(user_agent: str, rc_version: str) -> List[str]: pass result = extract_and_save( - url=JS_URL_TEMPLATE.format(rc_version), + url=JS_URL_TEMPLATE.format(rc_version, lang), path=STRINGS_PATH, version=STRINGS_VERSION, rc_version=rc_version, @@ -396,7 +400,7 @@ class ChallengeGoal(namedtuple("ChallengeGoal", [ class ReCaptcha: def __init__(self, api_key, site_url, user_agent, debug=False, - make_requests=True): + make_requests=True, lang = 'en'): self.api_key = api_key self.site_url = get_rc_site_url(site_url) self.debug = debug @@ -409,11 +413,15 @@ class ReCaptcha: self.js_strings = None self.rc_version = None + + self.language = lang + if make_requests: self.rc_version = get_rc_version(self.user_agent) - self.js_strings = get_js_strings(self.user_agent, self.rc_version) + self.js_strings = get_js_strings(self.user_agent, self.rc_version, self.language) self.solver_index = -1 + def first_solver(self) -> Solver: if self.solver_index >= 0: raise RuntimeError("First solver was already retrieved") @@ -451,7 +459,7 @@ class ReCaptcha: index = self.js_strings.index(id, start) for i in range(FIND_GOAL_SEARCH_DISTANCE): next_str = self.js_strings[index + i + 1] - if re.search(r"\bselect all\b", next_str, re.I): + if re.search(r"\b{}\b".format( CHALLENGE_GOAL_TEXT[ self.language] ) , next_str, re.I): matching_strings.append((i, index, next_str)) start = index + FIND_GOAL_SEARCH_DISTANCE + 1 diff --git a/platformcode/recaptcha.py b/platformcode/recaptcha.py index f8d0ebbd..3f6e7d95 100644 --- a/platformcode/recaptcha.py +++ b/platformcode/recaptcha.py @@ -5,7 +5,7 @@ from threading import Thread import channelselector import xbmcgui -from core import httptools +from core import httptools, support from core import filetools from platformcode import config, platformtools from platformcode import logger @@ -43,6 +43,7 @@ class Kodi: api_key=key, site_url=referer, user_agent=httptools.get_user_agent(), + lang = 'en' ) def run(self):