def handle_captcha(self): solvemedia = SolveMedia(self.pyfile) captcha_key = solvemedia.detect_key() if captcha_key: self.captcha = solvemedia response, challenge = solvemedia.challenge(captcha_key) self.data = self.load("http://www.mediafire.com/?" + self.info['pattern']['ID'], post={'adcopy_challenge': challenge, 'adcopy_response' : response}) return recaptcha = ReCaptcha(self.pyfile) captcha_key = recaptcha.detect_key() if captcha_key: url, inputs = self.parse_html_form('name="form_captcha"') self.log_debug(("form_captcha url:%s inputs:%s") % (url, inputs)) if url: self.captcha = recaptcha response, challenge = recaptcha.challenge(captcha_key) inputs['g-recaptcha-response'] = response self.data = self.load(self.fixurl(url), post=inputs) else: self.fail("ReCaptcha form not found")
def decrypt(self, pyfile): url = pyfile.url if re.match(self.__pattern__, url).group(1) == "d": header = self.load(url, just_header=True) if 'location' in header: self.urls = [header['location']] else: self.error(_("Couldn't find forwarded Link")) else: postData = {"post-protect": "1"} self.html = self.load(url) if "link-password" in self.html: postData['link-password'] = self.get_password() if "altcaptcha" in self.html: for _i in xrange(5): m = re.search(self.SOLVEMEDIA_PATTERN, self.html) if m: captchaKey = m.group(1) captcha = SolveMedia(self) captchaProvider = "Solvemedia" else: self.fail(_("Error parsing captcha")) response, challenge = captcha.challenge(captchaKey) postData['adcopy_challenge'] = challenge postData['adcopy_response'] = response self.html = self.load(url, post=postData) if "The password you entered was incorrect" in self.html: self.fail(_("Incorrect Password")) if not "The CAPTCHA code you entered was wrong" in self.html: break pyfile.package().password = "" soup = BeautifulSoup.BeautifulSoup(self.html) scripts = soup.findAll("script") for s in scripts: if "d_links" in s.text: break m = re.search('d_links":(\[.*?\])', s.text) if m: linkDict = json_loads(m.group(1)) for link in linkDict: if not "http://" in link['full']: self.urls.append("https://safelinking.net/d/" + link['full']) else: self.urls.append(link['full'])
def handle_captcha(self, inputs): m = re.search(self.CAPTCHA_PATTERN, self.data) if m is not None: captcha_url = m.group(1) inputs['code'] = self.captcha.decrypt(captcha_url) return m = re.search(self.CAPTCHA_BLOCK_PATTERN, self.data, re.S) if m is not None: captcha_div = m.group(1) numerals = re.findall(r'<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', html_unescape(captcha_div)) self.log_debug(captcha_div) inputs['code'] = "".join(a[1] for a in sorted(numerals, key=operator.itemgetter(0))) self.log_debug("Captcha code: %s" % inputs['code'], numerals) return recaptcha = ReCaptcha(self.pyfile) try: captcha_key = re.search(self.RECAPTCHA_PATTERN, self.data).group(1) except Exception: captcha_key = recaptcha.detect_key() else: self.log_debug("ReCaptcha key: %s" % captcha_key) if captcha_key: self.captcha = recaptcha inputs['recaptcha_response_field'], inputs['recaptcha_challenge_field'] = recaptcha.challenge(captcha_key) return solvemedia = SolveMedia(self.pyfile) try: captcha_key = re.search(self.SOLVEMEDIA_PATTERN, self.data).group(1) except Exception: captcha_key = solvemedia.detect_key() else: self.log_debug("SolveMedia key: %s" % captcha_key) if captcha_key: self.captcha = solvemedia inputs['adcopy_response'], inputs['adcopy_challenge'] = solvemedia.challenge(captcha_key)
def handle_captcha(self): solvemedia = SolveMedia(self) captcha_key = solvemedia.detect_key() if captcha_key: response, challenge = solvemedia.challenge(captcha_key) self.html = self.load("http://www.mediafire.com/?" + self.info['pattern']['ID'], post={'adcopy_challenge': challenge, 'adcopy_response' : response}) return recaptcha = ReCaptcha(self) captcha_key = recaptcha.detect_key() if captcha_key: response, challenge = recaptcha.challenge(captcha_key) self.html = self.load(self.pyfile.url, post={'g-recaptcha-response': response})
def handle_free(self, pyfile): #: Click the free user button post_data = {'op' : "download1", 'usr_login' : "", 'id' : self.info['pattern']['ID'], 'fname' : pyfile.name, 'referer' : "", 'method_free': "+"} self.html = self.load(pyfile.url, post=post_data) solvemedia = SolveMedia(self) response, challenge = solvemedia.challenge() #: Make the downloadlink appear and load the file m = re.search(self.RAND_ID_PATTERN, self.html) if m is None: self.error(_("Random key not found")) rand = m.group(1) self.log_debug("rand = ", rand) post_data = {'op' : "download2", 'id' : self.info['pattern']['ID'], 'rand' : rand, 'referer' : pyfile.url, 'method_free' : "+", 'method_premium' : "", 'adcopy_response' : response, 'adcopy_challenge': challenge, 'down_direct' : "1"} self.html = self.load(pyfile.url, post=post_data) m = re.search(self.LINK_FREE_PATTERN, self.html) if m is None: self.error(_("Download url not found")) self.link = m.group(1)
def handle_free(self, pyfile): #: Search for Download URL m = re.search(self.LINK_FREE_PATTERN, self.data) if m is None: self.error(_("LINK_FREE_PATTERN not found")) self.link = m.group(1) #: Set Timer - may be obsolete m = re.search(self.WAIT_PATTERN, self.data) if m is not None: self.wait(m.group(1)) #: Load.to is using solvemedia captchas since ~july 2014: solvemedia = SolveMedia(self) captcha_key = solvemedia.detect_key() if captcha_key: response, challenge = solvemedia.challenge(captcha_key) self.download(self.link, post={'adcopy_challenge': challenge, 'adcopy_response' : response, 'returnUrl' : pyfile.url})
def unlock_captcha_protection(self): m = re.search(self.CIRCLE_CAPTCHA_PATTERN, self.data) if m: self.log_debug("Request circle captcha resolving") captcha_id = m.group(1) coords = self.captcha.decrypt(self.CIRCLE_CAPTCHA_IMG_URL, get={'id': captcha_id}, input_type="png", output_type='positional') # , ocr="CircleCaptcha") self.log_debug("Captcha resolved, coords (%s,%s)" % (coords[0], coords[1])) post_data = {'button.x' : coords[0], 'button.y' : coords[1], 'captcha_id' : captcha_id, 'captcha_type': "RelinkCircle", 'captcha' : "submit"} else: solvemedia = SolveMedia(self.pyfile) captcha_key = solvemedia.detect_key() if captcha_key: self.log_debug(_("Request SolveMedia captcha resolving")) response, challenge = solvemedia.challenge() post_data = {'adcopy_response' : response, 'adcopy_challenge': challenge, 'captcha_type' : "Solvemedia", 'submit' : "Continue", 'captcha' : "submit"} else: self.log_error(_("Unknown captcha type detected")) self.fail(_("Unknown captcha type")) self.data = self.load(self.CAPTCHA_SUBMIT_URL, ref=False,# ref=self.CAPTCHA_SUBMIT_URL + "&id=" + self.file_id, get={'id': self.file_id}, post=post_data)
def handle_captcha(self): if re.search(self.CAPTCHA_PATTERN, self.data): m1 = re.search(self.INTERNAL_CAPTCHA_PATTERN, self.data) m2 = re.search(self.CIRCLE_CAPTCHA_PATTERN, self.data) m3 = re.search(self.SOLVE_MEDIA_PATTERN, self.data) m4 = re.search(self.KEY_CAPTCHA_PATTERN, self.data) if m1: #: Normal captcha self.log_debug("Internal Captcha URL: %s" % urlparse.urljoin(self.pyfile.url, m1.group(1))) captcha_code = self.captcha.decrypt(urlparse.urljoin(self.pyfile.url, m1.group(1)), ref=True, input_type="gif") self.site_with_links = self.load(self.pyfile.url, post={'recaptcha_response_field': captcha_code}) elif m2: #: Circle captcha self.log_debug("Circle Captcha URL: %s" % urlparse.urljoin(self.pyfile.url, m2.group(1))) captcha_code = self.captcha.decrypt(urlparse.urljoin(self.pyfile.url, m2.group(1)), input_type="png", output_type='positional') self.site_with_links = self.load(self.pyfile.url, post={'button.x': captcha_code[0], 'button.y': captcha_code[1]}) elif m3: #: Solvemedia captcha self.log_debug("Solvemedia Captcha URL: %s" % urlparse.urljoin(self.pyfile.url, m3.group(1))) solvemedia = SolveMedia(self) captcha_key = solvemedia.detect_key() if captcha_key: response, challenge = solvemedia.challenge(captcha_key) self.site_with_links = self.load(self.pyfile.url, post={'adcopy_response' : response, 'adcopy_challenge' : challenge}) elif m4: #: Keycaptcha captcha self.log_debug("Keycaptcha Captcha URL: %s unsupported, retrying" % m4.group(1)) self.retry() else: recaptcha = ReCaptcha(self) captcha_key = recaptcha.detect_key() if captcha_key: try: response, challenge = recaptcha.challenge(captcha_key) except Exception: self.retry_captcha() self.site_with_links = self.load(self.pyfile.url, post={'g-recaptcha-response': response}) else: self.log_info(_("Unknown captcha found, retrying")) self.retry() if re.search(self.CAPTCHA_PATTERN, self.site_with_links): self.retry_captcha() else: self.log_info(_("No captcha found")) self.site_with_links = self.data
class KingfilesNet(SimpleHoster): __name__ = "KingfilesNet" __type__ = "hoster" __version__ = "0.12" __status__ = "testing" __pattern__ = r'http://(?:www\.)?kingfiles\.net/(?P<ID>\w{12})' __config__ = [("activated" , "bool", "Activated" , True), ("use_premium" , "bool", "Use premium account if available" , True), ("fallback" , "bool", "Fallback to free download if premium fails" , True), ("chk_filesize", "bool", "Check file size" , True), ("max_wait" , "int" , "Reconnect if waiting time is greater than minutes", 10 )] __description__ = """Kingfiles.net hoster plugin""" __license__ = "GPLv3" __authors__ = [("zapp-brannigan", "*****@*****.**"), ("Walter Purcaro", "*****@*****.**")] NAME_PATTERN = r'name="fname" value="(?P<N>.+?)">' SIZE_PATTERN = r'>Size: .+?">(?P<S>[\d.,]+) (?P<U>[\w^_]+)' OFFLINE_PATTERN = r'>(File Not Found</b><br><br>|File Not Found</h2>)' RAND_ID_PATTERN = r'type=\"hidden\" name=\"rand\" value=\"(.+)\">' LINK_FREE_PATTERN = r'var download_url = \'(.+)\';' def setup(self): self.resume_download = True self.multiDL = True def handle_free(self, pyfile): #: Click the free user button post_data = {'op' : "download1", 'usr_login' : "", 'id' : self.info['pattern']['ID'], 'fname' : pyfile.name, 'referer' : "", 'method_free': "+"} self.data = self.load(pyfile.url, post=post_data) self.captcha = SolveMedia(pyfile) response, challenge = self.captcha.challenge() #: Make the downloadlink appear and load the file m = re.search(self.RAND_ID_PATTERN, self.data) if m is None: self.error(_("Random key not found")) rand = m.group(1) self.log_debug("rand = " + rand) post_data = {'op' : "download2", 'id' : self.info['pattern']['ID'], 'rand' : rand, 'referer' : pyfile.url, 'method_free' : "+", 'method_premium' : "", 'adcopy_response' : response, 'adcopy_challenge': challenge, 'down_direct' : "1"} self.data = self.load(pyfile.url, post=post_data) m = re.search(self.LINK_FREE_PATTERN, self.data) if m is None: self.error(_("Download url not found")) self.link = m.group(1)