2013-12-17 30 views
0

我碰到這樣一個問題:How to use Python to login to a webpage and retrieve cookies for later usage?記錄與蟒蛇成子頁(從另一個崗位)

所以,我試圖登錄到一個頁面,(使用請求的方法,second answer)。

當我打印使用

print request.text 

這將打印登錄頁面的HTML代碼的HTML,但不是說我把要求的子頁面。

是否存在代碼問題(我不認爲)還是我的代碼?

該代碼類似於該問題上的代碼,具有不同的頁面和用戶名。

謝謝!

from requests import session 

USERNAME = 'myuser' 
PASSWORD = 'mypwd' 

payload = { 
    'action': 'login', 
    'username': USERNAME, 
    'password': PASSWORD 
} 

with session() as c: 
    c.post('https://www.bricklink.com/login.asp', data=payload) #Login page 
    request = c.get('http://www.bricklink.com/orderExcelFinal.asp?') #Page I want to access 
    print request.headers 
    print request.text 

輸出

HTML code for the Login page, but not the page I want to access 
+0

如果您向我們展示了您的代碼(您可以製作頁面和用戶名),這將有所幫助。 – Gerrat

+0

我沒有發佈它,因爲它與另一個問題的第二個答案完全一樣。我只是在測試它。不過,我會重新發布它。謝謝! –

+0

您的第二次請求可能是無效頁面,只是將您發送回登錄頁面。第二個鏈接看起來有點腥......通常當一個URL以一個問號結束時,它後面有參數。如果你要手動登錄,然後請求這個頁面(正好),它會出現嗎? – Gerrat

回答

2

您的代碼不發送的登錄請求正確的數據。

每個網頁是不同的,並且爲了登錄發送不同的數據此致結構應當是這樣的:

from requests import session 

USERNAME = 'myuser' 
PASSWORD = 'mypwd' 

query = { 
    'logInTo': '', 
    'logFolder': 'p', 
    'logSub': 'w', 
} 

payload = { 
    'a': 'a', 
    'logFrmFlag': 'Y', 
    'frmUsername': USERNAME, 
    'frmPassword': PASSWORD, 
} 

with session() as c: 
    c.post('https://www.bricklink.com/login.asp', params=query, data=payload) #Login page 
    request = c.get('http://www.bricklink.com/orderExcelFinal.asp') #Page I want to access 
    print request.headers 
    print request.text 

在未來,當你需要找出哪些數據需要發送在嘗試提交表單時,您應該使用Chrome或Firefox的開發人員工具。使用這些來記錄您的登錄嘗試,然後相應地構建數據。開始使用Chrome的開發人員工具有點超出了這個答案的範圍,但網絡上有很多很好的資源,用於瞭解如何獲取此信息。

+0

優秀的答案!特別感謝關於Chrome開發工具的最後一篇技巧,我不知道在哪裏找到這樣的東西。乾杯! –