2014-10-06 139 views
0

我的表格結構登錄:無法使用python請求模塊

<POST https://www.lumosity.com/authentication application/x-www-form-urlencoded 
<HiddenControl(utf8=✓) (readonly)> 
<HiddenControl(authenticity_token=xMELAlMu5kqxE23RdvRj+UjyF+bXVynw9AgHIc2j69Q=) (readonly)> 
<HiddenControl(screen_resolution=) (readonly)> 
<HiddenControl(activation_code=) (readonly)> 
<HiddenControl(redirect_uri=) (readonly)> 
<TextControl(user[login]=)> 
<PasswordControl(user[password]=)> 
<SubmitControl(commit=Log In) (readonly)> 
<SubmitButtonControl(<None>=) (readonly)> 
<CheckboxControl(persistent_login=[*1])>> 

我的登錄IS代碼:

import requests 
from bs4 import BeautifulSoup as bs 

payload = { 
    'user[login]' : '***@gmail.com', 
    'user[password]' : '******' 
} 

with requests.Session() as s: 
    m = s.get('https://www.lumosity.com/login',headers={'User-agent': 'Mozilla/5.0'})   
    t = s.post('https://www.lumosity.com/login',data = payload) 
    r = s.get('http://www.lumosity.com/app/v4/dashboard') 

目前我沒有使用「真實性令牌」在日誌記錄。 是否需要

  1. 如果是這樣,我該如何訪問它?
  2. 全部表單結構中的參數需要通過「有效載荷」,即 ,即使有些是空的?
  3. 一旦我登錄成功,我應該打印哪些內容來驗證它是否成功?

回答

1

我想預計authenticity_token字段是必需的,是的。我說預計,因爲它確實取決於服務器到底會發生什麼。該服務器是一個黑盒子,我們無法看到它的行爲方式,但同樣的標記也與頂部的<meta>標記中的名稱csrf-token相關聯,因此它被用作跨站點僞造防護;我希望在這種情況下需要令牌。

而且,如果登錄與您的瀏覽器一起工作並且您的瀏覽器發送了該信息,最好嘗試儘可能地模仿該信息。

您必須解析出m對該值的響應結果。您可以使用BeautifulSoup此:

from bs4 import BeautifulSoup 

soup = BeautifulSoup(m.content) 
token = soup.select('input[name="authenticity_token"]')[0]['value'] 

閹或不登錄會沒有其他領域的工作是試驗和錯誤的問題。

但是,您需要調整,然後您將其張貼到;在/login的帖子到/authentication/login網址最有可能會再次返回表單,會返回405方法不允許錯誤。

s.post()調用的響應不再是登錄表單時,您就會知道您已經成功;例如當你被重定向到不同頁面。

您可以使用像robobrowser這樣的工具自動執行表單處理;它採用requests和BeautifulSoup一起做上述相同處理那些隱藏字段爲您提供:

from robobrowser import RoboBrowser 

browser = RoboBrowser(history=True) 
browser.open('https://www.lumosity.com/login') 
form = browser.get_form() 
form['user[login]'].value = '***@gmail.com' 
form['user[password'].value = '******' 
browser.submit_form(form) 
+0

感謝u.it工作 – dreamer 2014-10-06 15:35:50