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中是访问一下,最后结果如下:

 

Python POST登陆linkedin分析(完),完整实现过程

 

 

根据实名要求,需要绑定手机,这个就需要自己操作了。

 

上一篇关于cookie的问题,其实是因为抓包之前浏览器中以前的cookie造成的干扰,所以误认为会本地生成cookie,但实际上这个网站就这么简单,不可思议。

 

------------------------------

 

ID:Python之战

|作|者|公(zhong)号:python之战

专注Python,专注于网络爬虫、RPA的学习-践行-总结

喜欢研究技术瓶颈并分享,欢迎围观,共同学习。

学而无友,则孤陋而寡闻!

---------------------------