2016-06-24 222 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,不客氣。 –