2016-08-28 103 views
3

我試圖從我的學校頁面上網頁瀏覽一些信息,但我很難過去登錄。我知道有類似的問題,我花了整整一天的時間閱讀,但不能使它工作。使用Python的Requests模塊登錄到ASP網站

這是程序使用的IM(用戶名和密碼被改變):

import requests 

payload = {'ctl00$cphmain$Loginname': 'name', 'ctl00$cphmain$TextBoxHeslo': 'password'} 

page = requests.post('http://gymnaziumbma.no-ip.org:81/login.aspx', payload) 
open_page = requests.get("http://gymnaziumbma.no-ip.org:81/prehled.aspx?s=44&c=prub") 

#Check content 
if page.text == open_page.text: 
    print("Same page") 
else: 
    print(open_page.text) 
    print("Different page!") 

你能告訴我,什麼即時做錯了什麼?我缺少一些參數?爲此請提出好的方法?我正在嘗試robobrowser和BeautifulSoup,但也不管用。我敢打賭我錯過了一些非常微不足道的東西。使用Python 3.5

回答

3

林首先,你沒有使用Session所以即使你的第一篇文章成功登錄您的第二對此一無所知。其次,你缺少使用BeautifulSoup需要發佈的數據,__VIEWSTATEGENERATOR__VIEWSTATE,你可以從源解析:

from bs4 import BeautifulSoup 

data = {'ctl00$cphmain$Loginname': 'name', 'ctl00$cphmain$TextBoxHeslo': 'password'} 
# A Session object will persist the login cookies. 
with requests.Session() as s: 
    page = s.get('http://gymnaziumbma.no-ip.org:81/login.aspx').content 
    soup = BeautifulSoup(page) 
    data["___VIEWSTATE"] = soup.select_one("#__VIEWSTATE")["value"] 
    data["__VIEWSTATEGENERATOR"] = soup.select_one("#__VIEWSTATEGENERATOR")["value"] 
    s.post('http://gymnaziumbma.no-ip.org:81/login.aspx', data=data) 
    open_page = s.get("http://gymnaziumbma.no-ip.org:81/prehled.aspx?s=44&c=prub") 

    #Check content 
    if page.text == open_page.text: 
     print("Same page") 
    else: 
     print(open_page.text) 
     print("Different page!") 

你可以看到,被張貼在Chrome瀏覽器中的所有表單數據開發工具。

enter image description here

什麼是貼上面應該是足以讓登錄,如果沒有你需要的任何值可以使用BeautifulSoup登錄表進行解析。

+0

非常感謝。我不知道會議。當我嘗試使用你的解決方案時,我遇到了同樣的錯誤,當我嘗試使用RoboBrowser時:'code:data [「__ viewstate」] = soup.select_one(「#__ viewstate」)[「value」] TypeError:' NoneType'對象不是可以下載的。你有什麼想法爲什麼會發生? –

+0

是的,我應該使用'__VIEWSTATE'所有的首都,現在應該可以正常工作。 –

+0

非常感謝。在向數據添加三個其他參數後,它可以正常工作:) –