{"record":{"id":"57069806a68b8722","repo":"ytdl-org/youtube-dl","slug":"unable-to-log-in-570698","errorCode":null,"errorMessage":"Unable to log in","messagePattern":"Unable to log in","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/pluralsight.py","lineNumber":215,"sourceCode":"        if error:\n            raise ExtractorError('Unable to login: %s' % error, expected=True)\n\n        if all(not re.search(p, response) for p in (\n                r'__INITIAL_STATE__', r'[\"\\']currentUser[\"\\']',\n                # new layout?\n                r'>\\s*Sign out\\s*<')):\n            BLOCKED = 'Your account has been blocked due to suspicious activity'\n            if BLOCKED in response:\n                raise ExtractorError(\n                    'Unable to login: %s' % BLOCKED, expected=True)\n            MUST_AGREE = 'To continue using Pluralsight, you must agree to'\n            if any(p in response for p in (MUST_AGREE, '>Disagree<', '>Agree<')):\n                raise ExtractorError(\n                    'Unable to login: %s some documents. Go to pluralsight.com, '\n                    'log in and agree with what Pluralsight requires.'\n                    % MUST_AGREE, expected=True)\n\n            raise ExtractorError('Unable to log in')\n\n    def _get_subtitles(self, author, clip_idx, clip_id, lang, name, duration, video_id):\n        captions = None\n        if clip_id:\n            captions = self._download_json(\n                '%s/transcript/api/v1/caption/json/%s/%s'\n                % (self._API_BASE, clip_id, lang), video_id,\n                'Downloading captions JSON', 'Unable to download captions JSON',\n                fatal=False)\n        if not captions:\n            captions_post = {\n                'a': author,\n                'cn': int(clip_idx),\n                'lc': lang,\n                'm': name,\n            }\n            captions = self._download_json(\n                '%s/player/retrieve-captions' % self._API_BASE, video_id,","sourceCodeStart":197,"sourceCodeEnd":233,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/pluralsight.py#L197-L233","documentation":"The final fallback of PluralsightIE._login: the POST returned 2xx, no validation error span, no blocked banner, no agreement UI, and none of the logged-in markers (__INITIAL_STATE__, currentUser, 'Sign out'). The extractor cannot tell whether login worked, so it raises 'Unable to log in' — notably WITHOUT expected=True, flagging a likely site change as much as a credential problem.","triggerScenarios":"Pluralsight alters the post-login page (new layout, SPA shell, challenge page) so all three success-marker regexes miss while the failure-marker checks also miss. Or an unanticipated account state (email unverified, forced password reset) rendering a page with none of the searched strings.","commonSituations":"Frontend redesigns of app.pluralsight.com; Cloudflare/captcha interstitials on scripted POSTs; the regex list being maintained in yt-dlp but not this youtube_dl checkout.","solutions":["Log in manually in a browser to resolve any account-state prompt (verify email, reset password)","Use --cookies from a real browser session instead of credential login","Update to latest yt-dlp; if it persists there, the marker regexes need a fix — report upstream"],"exampleFix":"# before\nyoutube_dl --username me@example.com --password '...' 'https://app.pluralsight.com/player?...'\n# after\nyoutube_dl --cookies cookies.txt 'https://app.pluralsight.com/player?...'","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url, username=..., password=...)\nexcept ExtractorError as e:\n    if 'Unable to log in' in str(e):  # not expected → login page changed\n        ydl2 = YoutubeDL({'cookiefile': 'cookies.txt'})\n        info = ydl2.extract_info(url)  # browser-session fallback","preventionTips":["Default to --cookies for Pluralsight; credential login is brittle to redesigns","Treat this non-expected error as a canary for site changes and check yt-dlp updates","Complete any pending account prompts (email verify, password reset) in a browser"],"tags":["pluralsight","authentication","site-change","login","extractor-error"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}