使用Python Requests登录letterboxd.com返回200但未认证成功求助
Letterboxd登录爬取问题修复
核心问题分析
你的登录请求未生效,主要是这几个错误导致:
- 静态CSRF令牌无效:你用的是登录后留存的旧令牌,Letterboxd的CSRF令牌是动态生成的,每次访问登录页面都会刷新,必须在登录前从当前页面获取有效令牌。
- 多余的HTTP Basic Auth:代码里加了
auth=('my_user', 'my_pass'),但Letterboxd登录是基于表单提交的,不需要HTTP基本认证,这个参数会干扰正常登录流程。 - 提交参数不匹配:表单提交按钮的
value是Sign in(小写in),但你传的是Sign In,大小写不符会导致表单验证失败。 - 未预加载登录页面Cookie:登录前没先访问登录页面获取初始会话Cookie,Session无法建立有效会话。
修复后的代码示例
先安装beautifulsoup4用于解析HTML获取CSRF令牌:
pip install beautifulsoup4
修改后的登录代码:
import requests from bs4 import BeautifulSoup user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" with requests.Session() as s: # 设置浏览器UA s.headers['User-Agent'] = user_agent # 1. 先访问登录页面,获取有效CSRF令牌和初始会话Cookie login_page = s.get("https://letterboxd.com/signin/") soup = BeautifulSoup(login_page.text, 'html.parser') csrf_token = soup.find('input', {'name': '__csrf'})['value'] # 构造正确的登录表单数据 login_data = { '__csrf': csrf_token, 'authenticationCode': '', 'username': 'your_username', # 替换成你的用户名 'password': 'your_password', # 替换成你的密码 'remember': 'true', 'submit': 'Sign in' # 严格匹配表单按钮的value值 } # 2. 提交登录请求,移除多余的auth参数 login_response = s.post( "https://letterboxd.com/user/login.do", data=login_data ) # 验证登录状态:访问主页检查user_type字段 homepage = s.get("https://letterboxd.com/") if "analytic_params['user_type'] = 'Member';" in homepage.text: print("登录成功!") else: print("登录失败,请检查用户名密码或参数设置")
额外注意事项
- 验证码触发:多次登录失败后,Letterboxd可能会启用reCAPTCHA验证,此时requests无法自动处理,需手动验证或使用验证码服务(正常登录一般不会触发)。
- Cookie有效期:勾选
remember=true后,登录Cookie会长期有效;否则会话结束后失效。 - 页面结构变化:若后续CSRF令牌获取失败,需重新检查登录页面的HTML结构,确认令牌的选择器是否正确。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

