2014-04-27 60 views
0

我想通過使用請求庫登錄到linkedin。環顧四周後,最好的方法是使用requests.Session()我試圖做到這一點,但我沒有成功。 我認爲這與我發佈的鏈接有關。爲什麼不是請求無法正確登錄網站?

import requests 

payload = { 
    'session_key': EMAIL_GOES_HERE, 
    'session_password': PASSWORD_GOES_HERE 
} 

with requests.Session() as s: 
    s.post('https://www.linkedin.com/', data=payload) 
#program should be signed in here so I am going onto a private page that requeires the user to be signed in. 
r=s.get('https://www.linkedin.com/vsearch/p?f_CC=2289109') 
#saving the results in an HTML file for easy debugging/viewing 
html= open('testtest.html', 'w') 
html.write(r.content) 
html.close() 
+1

這可能是因爲您的帖子格式化,但在'with'語句中放入'r = ...'和以下幾行。 – ThinkChaos

回答

3

我應該指出,你真的應該使用他們的API開始: http://developer.linkedin.com/apis

似乎沒有要使用這些參數LinkedIn的頭版任何POST登錄?

這是你必須張貼到登錄網址: https://www.linkedin.com/uas/login-submit

請注意,這可能不會工作,要麼,你至少需要從登錄表單csrfToken參數。

您可能還需要loginCsrfParam,也可以從frontpage上的登錄表單中獲取。

這樣的事情可能會奏效。未經測試,您可能需要添加其他POST參數。

import requests 
s = requests.session() 

def get_csrf_tokens(): 
    url = "https://www.linkedin.com/" 
    req = s.get(url).text 

    csrf_token = req.split('name="csrfToken" value=')[1].split('" id="')[0] 
    login_csrf_token = req.split('name="loginCsrfParam" value="')[1].split('" id="')[0] 

    return csrf_token, login_csrf_token 


def login(username, password): 
    url = "https://www.linkedin.com/uas/login-submit" 
    csrfToken, loginCsrfParam = get_csrf_tokens() 

    data = { 
     'session_key': username, 
     'session_password': password, 
     'csrfToken': csrfToken, 
     'loginCsrfParam': loginCsrfParams 
    } 

    req = s.post(url, data=data) 

login('username', 'password') 
+0

感謝您的回覆。有用!我不使用API​​的原因是因爲它不支持我想要做的事情(找到公司的所有員工)。 – JONPON