Python POST登陆linkedin分析(完),完整实现过程
及上一篇对登陆linkedin分析《python登陆linkedin过程分析,及二次验证(一)》分析之后,这篇来完整实现整个过程,并来验证结果,先看完整源码。
import requests
from lxml import etree
session = requests.Session()
def login(name, password):
session.headers = {"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"accept-encoding": "gzip, deflate, br",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
}
url = 'https://www.linkedin.com/'
login_url = 'https://www.linkedin.com/uas/login-submit?' \
'loginSubmitSource=GUEST_HOME'
page = session.get(url)
rp = etree.HTML(page.text)
loginCsrfParam = rp.xpath('//*[@name="loginCsrfParam"]/@value')[0]
form_data = {
'session_key': name,
'session_password': password,
'loginCsrfParam': loginCsrfParam,
'isJsEnabled': 'false'
}
page_login = session.post(login_url, data=form_data
)
login_rp = etree.HTML(page_login.text)
verify_url = 'https://www.linkedin.com/checkpoint/challenge/verify'
csrfToken = login_rp.xpath('//*[@name="csrfToken"]/@value')[0]
pageInstance = login_rp.xpath('//*[@name="pageInstance"]/@value')[0]
resendUrl = login_rp.xpath('//*[@name="resendUrl"]/@value')[0]
challengeId = login_rp.xpath('//*[@name="challengeId"]/@value')[0]
language = 'zh-CN'
displayTime = login_rp.xpath('//*[@name="displayTime"]/@value')[0]
challengeSource = login_rp.xpath('//*[@name="challengeSource"]/@value')[0]
requestSubmissionId = login_rp.xpath('//*[@name="requestSubmissionId"]/@value')[0]
challengeType = login_rp.xpath('//*[@name="challengeType"]/@value')[0]
challengeData = login_rp.xpath('//*[@name="challengeData"]/@value')[0]
failureRedirectUri = login_rp.xpath('//*[@name="failureRedirectUri"]/@value')[0]
pin = input('请输入验证码')
verify_data = {
'csrfToken': csrfToken,
'pageInstance': pageInstance,
'resendUrl': resendUrl,
'challengeId': challengeId,
'language': language,
'displayTime': displayTime,
'challengeSource': challengeSource,
'requestSubmissionId': requestSubmissionId,
'challengeType': challengeType,
'challengeData': challengeData,
'failureRedirectUri': failureRedirectUri,
'pin': pin,
}
verify_post = session.post(verify_url, data=verify_data)
if __name__ == '__main__':
login('[email protected]', 'asdfghj')
大致过程是首先请求主页,然后提取主页中的loginCsrfParam输入框的值,附带在我们的post请求中,发起登陆请求。
发出登陆请求后会返回验证页面,然后我们提取验证页面中的几个input标签的默认值作为发送验证post的参数
verify_url = 'https://www.linkedin.com/checkpoint/challenge/verify'
csrfToken = login_rp.xpath('//*[@name="csrfToken"]/@value')[0]
pageInstance = login_rp.xpath('//*[@name="pageInstance"]/@value')[0]
resendUrl = login_rp.xpath('//*[@name="resendUrl"]/@value')[0]
challengeId = login_rp.xpath('//*[@name="challengeId"]/@value')[0]
language = 'zh-CN'
displayTime = login_rp.xpath('//*[@name="displayTime"]/@value')[0]
challengeSource = login_rp.xpath('//*[@name="challengeSource"]/@value')[0]
requestSubmissionId = login_rp.xpath('//*[@name="requestSubmissionId"]/@value')[0]
challengeType = login_rp.xpath('//*[@name="challengeType"]/@value')[0]
challengeData = login_rp.xpath('//*[@name="challengeData"]/@value')[0]
failureRedirectUri = login_rp.xpath('//*[@name="failureRedirectUri"]/@value')[0]
pin = input('请输入验证码')
verify_data = {
'csrfToken': csrfToken,
'pageInstance': pageInstance,
'resendUrl': resendUrl,
'challengeId': challengeId,
'language': language,
'displayTime': displayTime,
'challengeSource': challengeSource,
'requestSubmissionId': requestSubmissionId,
'challengeType': challengeType,
'challengeData': challengeData,
'failureRedirectUri': failureRedirectUri,
'pin': pin,
}
其中验证码可以使用下面库读取邮件,但是读取邮件是一个完整的功能,包括邮件附件、邮件正文、邮件中转发的邮件,应该作为单独的一个功能单元实现,后面会分享该单元。
import email
from imapclient import IMAPClient
import traceback
然后我们发送验证的post请求,返回结果是200,这个时候我们可以把页面打印出来看看,或者获取cookie在webdriver中是访问一下,最后结果如下:
根据实名要求,需要绑定手机,这个就需要自己操作了。
上一篇关于cookie的问题,其实是因为抓包之前浏览器中以前的cookie造成的干扰,所以误认为会本地生成cookie,但实际上这个网站就这么简单,不可思议。
------------------------------
ID:Python之战
|作|者|公(zhong)号:python之战
专注Python,专注于网络爬虫、RPA的学习-践行-总结
喜欢研究技术瓶颈并分享,欢迎围观,共同学习。
学而无友,则孤陋而寡闻!
---------------------------