我正在尝试使用python请求登录到coursera。登录form是动态加载的,无法使用GET进行访问。下面是一个演示:
from requests_html import HTMLSession
with HTMLSession() as sess:
r = sess.get('https://www.coursera.org/?authMode=login')
email_xp = '//*[@id="email"]'
print(r.html.xpath(email_xp))
r.html.render()
print(r.html.xpath(email_xp))打印的内容:
[]
[<Element 'input' data-e2e='login-email-input' placeholder='name@email.com' aria-required='false' id='email' name='email' type='email' class=('css-7dsrhu',)>]https://www.coursera.org/learn/course-i-am-enrolled-in/home/week/1发布于 2021-09-20 02:30:43
加载页面https://www.coursera.org/?authMode=login将返回一个包含表单的HTML页面。如果您填写并提交表单,它会将该信息收集到指向目标URL的HTTP POST的正文中。这是您需要访问的URL,而不是HTML页面https://www.coursera.org/?authMode=login。
如果您尝试登录,它会在此处转发您的凭据:

因此,您需要执行以下操作:
https://www.coursera.org/api/login/v3{"email":"email@email.com","password":"thepassword","recaptchaToken":"thetoken","webrequest":true}如果响应是状态代码2xx (例如200),则您的登录成功。
您可能想要检查coursera-dl,我认为它是针对Coursera的应用程序接口。还有关于登录到https://api.coursera.org/api/login/v3的open issue
https://stackoverflow.com/questions/69248276
复制相似问题