fix recaptcha (#363)
* ignore bin and abi * use ITA * change language by arguments
This commit is contained in:
@@ -7,3 +7,5 @@ custom_code.json
|
|||||||
last_commit.txt
|
last_commit.txt
|
||||||
__pycache__/
|
__pycache__/
|
||||||
.vscode/settings.json
|
.vscode/settings.json
|
||||||
|
bin/
|
||||||
|
lib/abi
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user