我知道这个问题在SO中被多次询问,但没有一个能解决我的问题。 我想通过脚本登录网站,以便我可以抓取一些数据。
这是我的登录功能:
def login(self):
s = requests.Session()
r0 = s.get('https://www.example.com/')
loginCsrfParam= r0.cookies['loginCsrfParam']
payload = {'username': 'xxxx', 'loginCsrfParam': loginCsrfParam,
'next': '',
'password': 'xxxxxx'}
head={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"}
p = s.post('https://www.example.com/list', data=payload, headers=head)
print p.text.encode('utf-8')
但它没有登录。有什么帮助?
修改
正如@furas在评论中提到的,在前面的代码中,我在cookie中设置了csrftoken,这在隐藏字段中是不一样的..所以我使用beautifulsoup
更改了代码,如下所示:
def login(self):
head={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"}
with session() as s:
soup = BeautifulSoup(s.get("https://www.example.com/").content)
form_data = soup.select("form[action^=/login] input")
print form_data[0]['value']
payload = {'username': 'rahma', 'csrfmiddlewaretoken': form_data[0]['value'],
'next': '',
'password': 'gamboladmin'}
print '********', form_data
s.post('https://www.example.com/', data=payload, headers=head)
resp = s.get('https://www.example.com/secured_page/')
print resp.text.encode('utf-8')
form_data[0]['value']
在隐藏的输入中打印相同的csrf令牌..但我无法访问受保护的页面:/
答案 0 :(得分:0)
我有同样的问题,我找到了解决方案。 您必须检查表单中是否有隐藏字段.. 你必须设置它们