diff --git a/youtube_dl/extractor/crunchyroll.py b/youtube_dl/extractor/crunchyroll.py index 463f995c7..fc1210079 100644 --- a/youtube_dl/extractor/crunchyroll.py +++ b/youtube_dl/extractor/crunchyroll.py @@ -52,28 +52,51 @@ class CrunchyrollBaseIE(InfoExtractor): username, password = self._get_login_info() if username is None: return + ''' + import cfscrape - self._download_webpage( + proxies = {"http": self._downloader.params.get('proxy'), "https": self._downloader.params.get('proxy')} + tokens, user_agent = cfscrape.get_tokens(self._LOGIN_URL, proxies=proxies, user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0") + + self._set_cookie( '.crunchyroll.com', 'cf_clearance',tokens['cf_clearance']) + self._set_cookie( '.crunchyroll.com', '__cfduid',tokens['__cfduid']) + ''' + login_page = self._download_webpage( 'https://www.crunchyroll.com/?a=formhandler', None, 'Logging in', 'Wrong login info', data=urlencode_postdata({ 'formname': 'RpcApiUser_Login', 'next_url': 'https://www.crunchyroll.com/acct/membership', + 'fail_url': self._LOGIN_URL, 'name': username, 'password': password, - })) - - ''' - login_page = self._download_webpage( - self._LOGIN_URL, None, 'Downloading login page') + }), expected_status=503) def is_logged(webpage): - return 'Redirecting' in webpage + return '<title>Redirecting' in webpage or '/logout' in webpage # Already logged in if is_logged(login_page): return + + ''' + print [tokens, user_agent] + + + form_data = self._form_hidden_inputs('challenge-form', login_page) + form_data['jschl_answer'] = self.solve_challenge(login_page, 'www.crunchyroll.com') + print form_data + self._sleep(6, None, 'Solving CloudFlare Challenge') + login_page = self._download_webpage('https://www.crunchyroll.com/cdn-cgi/l/chk_jschl', None, 'Login Form', data=urlencode_postdata(form_data), headers={ + 'Referer': self._LOGIN_URL, + }, expected_status= 503) + + import codecs + with codecs.open("yop", "w", encoding="utf-8") as f: + f.write(login_page) + ''' + login_form_str = self._search_regex( r'(?P<form><form[^>]+?id=(["\'])%s\2[^>]*>)' % self._LOGIN_FORM, login_page, 'login form', group='form') @@ -107,7 +130,7 @@ class CrunchyrollBaseIE(InfoExtractor): raise ExtractorError('Unable to login: %s' % error, expected=True) raise ExtractorError('Unable to log in') - ''' + def _real_initialize(self): self._login() @@ -123,6 +146,7 @@ class CrunchyrollBaseIE(InfoExtractor): # Crunchyroll to not work in georestriction cases in some browsers that don't place # the locale lang first in header. However allowing any language seems to workaround the issue. request.add_header('Accept-Language', '*') + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0') return super(CrunchyrollBaseIE, self)._download_webpage(request, *args, **kwargs) @staticmethod