无法使用python请求模块
问题描述:
我的表格结构登录:无法使用python请求模块
<POST https://www.lumosity.com/authentication application/x-www-form-urlencoded
<HiddenControl(utf8=✓) (readonly)>
<HiddenControl(authenticity_token=xMELAlMu5kqxE23RdvRj+UjyF+bXVynw9AgHIc2j69Q=) (readonly)>
<HiddenControl(screen_resolution=) (readonly)>
<HiddenControl(activation_code=) (readonly)>
<HiddenControl(redirect_uri=) (readonly)>
<TextControl(user[login]=)>
<PasswordControl(user[password]=)>
<SubmitControl(commit=Log In) (readonly)>
<SubmitButtonControl(<None>=) (readonly)>
<CheckboxControl(persistent_login=[*1])>>
我的登录IS代码:
import requests
from bs4 import BeautifulSoup as bs
payload = {
'user[login]' : '***@gmail.com',
'user[password]' : '******'
}
with requests.Session() as s:
m = s.get('https://www.lumosity.com/login',headers={'User-agent': 'Mozilla/5.0'})
t = s.post('https://www.lumosity.com/login',data = payload)
r = s.get('http://www.lumosity.com/app/v4/dashboard')
目前我没有使用“真实性令牌”在日志记录。 是否需要?
- 如果是这样,我该如何访问它?
- 做全部表单结构中的参数需要通过“有效载荷”,即 ,即使有些是空的?
- 一旦我登录成功,我应该打印哪些内容来验证它是否成功?
答
我想预计authenticity_token
字段是必需的,是的。我说预计,因为它确实取决于服务器到底会发生什么。该服务器是一个黑盒子,我们无法看到它的行为方式,但同样的标记也与顶部的<meta>
标记中的名称csrf-token
相关联,因此它被用作跨站点伪造防护;我希望在这种情况下需要令牌。
而且,如果登录与您的浏览器一起工作并且您的浏览器发送了该信息,最好尝试尽可能地模仿该信息。
您必须解析出m
对该值的响应结果。您可以使用BeautifulSoup此:
from bs4 import BeautifulSoup
soup = BeautifulSoup(m.content)
token = soup.select('input[name="authenticity_token"]')[0]['value']
阉或不登录会没有其他领域的工作是试验和错误的问题。
但是,您需要调整,然后您将其张贴到;在/login
的帖子到/authentication
。 /login
网址最有可能会再次返回表单,或会返回405方法不允许错误。
当s.post()
调用的响应不再是登录表单时,您就会知道您已经成功;例如当你被重定向到不同页面。
您可以使用像robobrowser这样的工具自动执行表单处理;它采用requests
和BeautifulSoup一起做上述相同和处理那些隐藏字段为您提供:
from robobrowser import RoboBrowser
browser = RoboBrowser(history=True)
browser.open('https://www.lumosity.com/login')
form = browser.get_form()
form['user[login]'].value = '***@gmail.com'
form['user[password'].value = '******'
browser.submit_form(form)
感谢u.it工作 – dreamer 2014-10-06 15:35:50