fix recaptcha (#363)

* ignore bin and abi

* use ITA

* change language by arguments
This commit is contained in:
fatshotty
2021-11-24 18:05:07 +01:00
committed by GitHub
parent 5233da7638
commit 591fb12edf
3 changed files with 18 additions and 7 deletions
+2
View File
@@ -7,3 +7,5 @@ custom_code.json
last_commit.txt last_commit.txt
__pycache__/ __pycache__/
.vscode/settings.json .vscode/settings.json
bin/
lib/abi
+14 -6
View File
@@ -38,13 +38,17 @@ import time
BASE_URL = "https://www.google.com/recaptcha/api2/" BASE_URL = "https://www.google.com/recaptcha/api2/"
API_JS_URL = "https://www.google.com/recaptcha/api.js" API_JS_URL = "https://www.google.com/recaptcha/api.js"
JS_URL_TEMPLATE = """\ JS_URL_TEMPLATE = """\
https://www.gstatic.com/recaptcha/releases/{}/recaptcha__en.js https://www.gstatic.com/recaptcha/releases/{}/recaptcha__{}.js
"""[:-1] """[:-1]
STRINGS_VERSION = "0.1.0" STRINGS_VERSION = "0.1.0"
STRINGS_PATH = os.path.join( STRINGS_PATH = os.path.join(
os.path.expanduser("~"), ".cache", "librecaptcha", "cached-strings", os.path.expanduser("~"), ".cache", "librecaptcha", "cached-strings",
) )
CHALLENGE_GOAL_TEXT = {
'en': 'select all',
'it': 'seleziona tutti'
}
DYNAMIC_SELECT_DELAY = 4.5 # seconds DYNAMIC_SELECT_DELAY = 4.5 # seconds
FIND_GOAL_SEARCH_DISTANCE = 10 FIND_GOAL_SEARCH_DISTANCE = 10
@@ -122,7 +126,7 @@ def get_rresp(uvresp):
return None 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(): def get_json():
with open(STRINGS_PATH) as f: with open(STRINGS_PATH) as f:
version, text = f.read().split("\n", 1) version, text = f.read().split("\n", 1)
@@ -136,7 +140,7 @@ def get_js_strings(user_agent: str, rc_version: str) -> List[str]:
pass pass
result = extract_and_save( result = extract_and_save(
url=JS_URL_TEMPLATE.format(rc_version), url=JS_URL_TEMPLATE.format(rc_version, lang),
path=STRINGS_PATH, path=STRINGS_PATH,
version=STRINGS_VERSION, version=STRINGS_VERSION,
rc_version=rc_version, rc_version=rc_version,
@@ -396,7 +400,7 @@ class ChallengeGoal(namedtuple("ChallengeGoal", [
class ReCaptcha: class ReCaptcha:
def __init__(self, api_key, site_url, user_agent, debug=False, 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.api_key = api_key
self.site_url = get_rc_site_url(site_url) self.site_url = get_rc_site_url(site_url)
self.debug = debug self.debug = debug
@@ -409,11 +413,15 @@ class ReCaptcha:
self.js_strings = None self.js_strings = None
self.rc_version = None self.rc_version = None
self.language = lang
if make_requests: if make_requests:
self.rc_version = get_rc_version(self.user_agent) 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 self.solver_index = -1
def first_solver(self) -> Solver: def first_solver(self) -> Solver:
if self.solver_index >= 0: if self.solver_index >= 0:
raise RuntimeError("First solver was already retrieved") raise RuntimeError("First solver was already retrieved")
@@ -451,7 +459,7 @@ class ReCaptcha:
index = self.js_strings.index(id, start) index = self.js_strings.index(id, start)
for i in range(FIND_GOAL_SEARCH_DISTANCE): for i in range(FIND_GOAL_SEARCH_DISTANCE):
next_str = self.js_strings[index + i + 1] 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)) matching_strings.append((i, index, next_str))
start = index + FIND_GOAL_SEARCH_DISTANCE + 1 start = index + FIND_GOAL_SEARCH_DISTANCE + 1
+2 -1
View File
@@ -5,7 +5,7 @@ from threading import Thread
import channelselector import channelselector
import xbmcgui import xbmcgui
from core import httptools from core import httptools, support
from core import filetools from core import filetools
from platformcode import config, platformtools from platformcode import config, platformtools
from platformcode import logger from platformcode import logger
@@ -43,6 +43,7 @@ class Kodi:
api_key=key, api_key=key,
site_url=referer, site_url=referer,
user_agent=httptools.get_user_agent(), user_agent=httptools.get_user_agent(),
lang = 'en'
) )
def run(self): def run(self):