2016-06-24 230 views
1

这里是我想用python requests模块登录的站点http://pro.wialon.com/。登录和传递是演示。Python请求使用重定向登录

import requests 
with requests.Session()as c: 
    url = 'http://pro.wialon.com/' 
    payload = dict(user='demo', 
         passw='demo', 
         login_action='login') 
    r = c.post(url, data=payload, allow_redirects=True) 
    print(r.text) 

坦率地说,我想获得报告(在报告标签)作为回应。但我无法弄清楚如何登录

+0

您没有给我们足够的信息。告诉我们什么不起作用是一个好的开始。我知道的一件事是,这个网站,就像大多数网站一样,*可能*使用cookies,除非你传递了一个cookie jar与你的请求,否则你可能无法登录。 –

+0

也我不知道你'重新尝试去做,但是如果你主要在登录后尝试做事情,你可以看看'browsercookie'模块。这将允许您使用Firefox/Chrome登录,然后以编程方式使用您在Web浏览器 –

回答

0

帖子网址是不正确的,你缺少的表单数据,你也需要做一个初始请求,后到正确的网址,然后得到http://pro.wialon.com/service.html

data = {"user": "demo", 
    "passw": "demo", 
    "submit": "Enter", 
    "lang": "en", 
    "action": "login"} 

head = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"} 

with requests.Session() as c: 
    c.get('http://pro.wialon.com/') 
    url = 'http://pro.wialon.com/login_action.html' 
    c.post(url, data=data, headers=head) 
    print(c.get("http://pro.wialon.com/service.html").content) 

你可以看到Chrome浏览器开发工具的帖子在网络选项卡下:

enter image description here

也是默认为post或get请求是允许重新导向,这样你就不需要在这里指定。

您可以在登录页面源代码看到,表单动作:

<form class="login_bg_form" id="login_form" action="login_action.html" method="POST"> 

而不是硬编码,我们可以从形式分析它的路径,使用BS4

import requests 
from bs4 import BeautifulSoup 
from urlparse import urljoin 

data = {"user": "demo", 
     "passw": "demo", 
     "submit": "Enter", 
     "lang": "en", 
     "action": "login"} 

head = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"} 

with requests.Session()as c: 
    soup = BeautifulSoup(c.get('http://pro.wialon.com/').content) 
    redir = soup.select_one("#login_form")["action"] 
    url = 'http://pro.wialon.com/login_action.html' 
    c.post(url, data=data, headers=head) 
    print(c.get(urljoin("http://pro.wialon.com/", redir)).content) 

现在唯一的问题是数据大多使用Ajax请求填充,所以如果你想抓取数据,你需要模仿请求。

+0

中创建的会话,非常感谢。它现在的工作:) –

+0

没有porb,不客气。 –