如何使用Python requests实现Coursera登录及登录状态验证
基于requests-html的Coursera登录及验证方案
Coursera登录接口采用/api/login/v3路径,请求格式为JSON,同时需要携带页面生成的CSRF令牌,完整实现步骤和代码如下:
完整实现代码
from requests_html import HTMLSession # 替换为你自己的账号信息 USER_EMAIL = "你的登录邮箱" USER_PASSWORD = "你的登录密码" # 替换为你的目标课程地址 TARGET_COURSE_URL = "https://www.coursera.org/learn/course-i-am-enrolled-in/home/week/1" with HTMLSession() as sess: # 1. 访问登录页并渲染动态内容 login_page_resp = sess.get('https://www.coursera.org/?authMode=login') # 增加sleep参数确保动态元素加载完成,可根据网络情况调整时长 login_page_resp.html.render(sleep=2) # 2. 提取CSRF令牌(存储在meta标签中) csrf_token = login_page_resp.html.xpath('//meta[@name="CSRF-Token"]/@content')[0] # 3. 构造登录请求头和请求体 login_headers = { "Content-Type": "application/json", "X-CSRFToken": csrf_token, "Referer": "https://www.coursera.org/?authMode=login" } login_payload = { "email": USER_EMAIL, "password": USER_PASSWORD, "webrequest": True } # 4. 发送登录POST请求 login_resp = sess.post( "https://www.coursera.org/api/login/v3", headers=login_headers, json=login_payload ) # 5. 验证登录状态 if login_resp.status_code == 200: print("登录请求提交成功,正在验证课程访问权限...") course_resp = sess.get(TARGET_COURSE_URL) if course_resp.status_code == 200: print("登录验证成功,可正常访问已开通课程") else: print(f"登录验证失败,课程页返回状态码:{course_resp.status_code}") else: print(f"登录请求失败,状态码:{login_resp.status_code},错误信息:{login_resp.text}")
注意事项
- 若触发人机验证,代码会登录失败,此时需要先在浏览器手动完成一次登录,再复制浏览器的Cookie到会话中使用
- 不要短时间内频繁发送登录请求,否则会被平台限制访问
- 页面元素路径和接口路径可能随平台更新变化,若运行失败可先检查登录页的元素和接口是否有调整
内容的提问来源于stack exchange,提问作者watch-this
相关产品推荐
相关产品推荐

