使用python请求无法登录网站

时间:2017-12-13 11:31:41

标签: python login python-requests session-cookies

我知道这个问题在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令牌..但我无法访问受保护的页面:/

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我找到了解决方案。 您必须检查表单中是否有隐藏字段.. 你必须设置它们