2014-04-27 58 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