这是一个网站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)
坦率地说,我希望得到报告(在报告标签中)作为回应。但我无法弄清楚如何登录。
帖子网址不正确,你缺少表单数据,你还需要做一个初始请求,发布到正确的网址,然后获取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 dev工具中查看帖子:
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请求填充的,所以如果你想要抓取数据,你需要模仿请求。
我也面临同样的事情。我们的产品实际上将登录身份验证请求重定向到第三方应用程序,如果登录凭据有效,第三方应用程序再次使用所需的cookie重定向到我们的应用程序。
我得到的解决方案是,在无头浏览器中使用selenium来输入登录凭据。然后单击使用selenium登录。然后将进行重定向和身份验证,然后您的浏览器将收到所需的cookie。现在只需使用driver.getcookies()
获取cookie并将其存储在变量中。然后在标头中设置此cookie,并将此标头用于将来的REST API调用。
完成!