领英模拟登陆

news/2024/11/13 3:58:23/

说明

上一篇文章已经爬虫目的, 脉脉模拟登陆。

领英模拟登陆难度略大于脉脉

操作

1、登陆接口

其中session_key是用户名,session_password是密码。

关键点

1、loginCsrfParam

2、cookie

3、csrf_token

寻找参数

1、loginCsrfParam

这个参数是你访问领英首页就会响应的一个结果,可以通过xpath定位

//input[@id="loginCsrfParam-login"]/@value

2、cookie

此时的cookie是并没有进行登陆的cookie,此时我们需要保存本次的cookie,因为模拟登陆的接口是需要本次cookie的。

3、csrf_token

这个参数是和loginCsrfParam成对出现的,当你携带loginCsrfParam访问了首页,在首页的响应cookie中,会有JSESSIONID字段,JSESSIONID字段的值就是csrf_token的值。

当我们把所有的参数都找到之后就可以直接模拟登陆了。

完整代码

 

import requests
from lxml import etree
import demjsonclass Login:def __init__(self):# 输入用户名和密码self.username = ""self.password = ""def get_index_csrf_and_cookie(self):session = requests.Session()url = "https://www.linkedin.com/"querystring = {"trk": "brandpage_baidu_pc-mainlink"}headers = {'authority': "www.linkedin.com",'cache-control': "max-age=0,no-cache",'upgrade-insecure-requests': "1",'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36",'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",'referer': "https://www.baidu.com/s?ie=UTF-8&wd=%E9%A2%86%E8%8B%B1",'accept-encoding': "gzip, deflate, br",'accept-language': "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",}response = session.request("GET", url, headers=headers, params=querystring)cookie = ""csrf_token = ""for c in session.cookies:if c.name == "JSESSIONID":csrf_token = c.valuecookie = cookie + c.name + "=" + c.value + "; "html = etree.HTML(response.text)csrf = html.xpath('//input[@id="loginCsrfParam-login"]/@value')[0]index_login_data = {"cookie": cookie,"csrf": csrf,"csrf_token": csrf_token}with open("index_cookie.json", "w") as f:f.write(str(index_login_data))def login(self):with open("index_cookie.json", "r") as f:index_cookie = f.read()json_cookie = demjson.decode(index_cookie)csrf = json_cookie.get("csrf")cookie = json_cookie.get("cookie")s = requests.session()url = "https://www.linkedin.com/uas/login-submit"querystring = {"loginSubmitSource": "GUEST_HOME"}payload = "session_key={0}&session_password={1}&isJsEnabled=false&loginCsrfParam={2}&fp_data=default&undefined=".format(self.username, self.password, csrf)headers = {'authority': "www.linkedin.com",'cache-control': "max-age=0,no-cache",'origin': "https://www.linkedin.com",'upgrade-insecure-requests': "1",'content-type': "application/x-www-form-urlencoded",'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36",'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",'referer': "https://www.linkedin.com/",'accept-encoding': "gzip, deflate, br",'accept-language': "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",'cookie': cookie}s.request("POST", url, data=payload, headers=headers, params=querystring)cookie = ""csrf_token = ""for c in s.cookies:if c.name == "JSESSIONID":csrf_token = c.valuecookie = cookie + c.name + "=" + c.value + "; "cookie_data = {"cookie": cookie,"csrf_token": csrf_token}with open("cookie.json", "w") as f:f.write(str(cookie_data))def test_login(self):with open("cookie.json", "r") as f:cookie_text = f.read()json_cookie = demjson.decode(cookie_text)csrf_token = json_cookie['csrf_token']cookie = json_cookie['cookie']headers1 = {'x-li-track': '{"clientVersion":"1.2.7373","osName":"web","timezoneOffset":8,"deviceFormFactor":"DESKTOP","mpName":"voyager-web"}','cookie': cookie,'accept-encoding': "gzip, deflate, br",'x-li-lang': "zh_CN",'accept-language': "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36",'x-li-page-instance': "urn:li:page:d_flagship3_feed;LvtQ1iY2QeGSOhIoA8jaQQ==",'accept': "application/vnd.linkedin.normalized+json+2.1",'csrf-token': csrf_token.replace('"', ""),'x-restli-protocol-version': "2.0.0",'authority': "www.linkedin.com",'referer': "https://www.linkedin.com/feed/",'cache-control': "no-cache",}url = "https://www.linkedin.com/feed/"response = requests.request("GET", url, headers=headers1)response.encoding = "utf-8"print(response.text)# u = "https://www.linkedin.com/voyager/api/onboarding/launchpadCard"# querystring = {"context": "FEED", "q": "context"}# r = requests.get(u, headers=headers1, params=querystring)# print(r.text)if __name__ == "__main__":login = Login()# login.get_index_csrf_and_cookie()# login.login()# with open("index_cookie.json", "r") as f:#     session = f.read()#     se = demjson.decode(session)# print(se.get("csrf_token"))## with open("cookie.json", "r") as f:#     cookie = f.read()#     json_cookie = demjson.decode(cookie)# print(json_cookie['cookie'])login.test_login()

 


http://www.ppmy.cn/news/673895.html

相关文章

【杂谈】为什么领英职场停止服务并宣布调整中国业务战略?

5月9日,领英在双微发布“致领英职场会员的一封信”和“领英在华相关服务调整及策略更新”,宣布在慎重考量后决定调整中国业务战略,在中国的本土化求职平台——“领英职场”将于2023年8月9日起正式停止服务,中国团队的规模也将有所…

LinkedIn领英上的几度人脉是什么意思?如何突破领英人脉限制高效率开发客户?

LinkedIn领英上的几度人脉分别代表什么意思?LinkedIn领英是全球最大的职场社交平台,全球用户总数量已经超过5亿,关于领英的介绍就不多做赘述了,今天我们来谈谈关于领英人脉的那些问题和事情。一.什么是领英人脉?有效通…

LinkedIn领英人脉显示1度、2度、3度、领英会员的意思和区别是什么?

对于新注册使用LinkedIn领英的人来说,LinkedIn领英人脉的规则一定是最让人头痛的问题之一,因为我刚开始用LinkedIn领英的时候,就是被这个折磨到差点放弃。 但LinkedIn领英又是全球最大的职场社交平台,全球用户总数量已经超过5亿多…

领英升级会员的付费账号都有什么区别

领英常见问题-领英付费账号有什么区别? 领英分为免费的标准账号和收费的高级账号,注册即为标准账号,标准账号只有基本的功能,各个方面有许多限制。比如:每月搜索次数有限制、每月浏览档案有限制等。很多人为了不受这些…

如何打造领英朋友圈_有哪些领英快速扩充人脉的技巧?

为什么在LinkedIn领英上搜到的客户都是显示领英会员(Linkedin Member)?无法向对方发送添加好友邀请?也无法向访问对方的LinkedIn领英个人主页?这是很多人都遇到的难题,也是使用LinkedIn领英的第一道坎。如图: 对于很多…

领英如何撤回邀请

在很多情况下,如果邀请的收件人尚未对邀请采取任何行动,您可以在人脉页面撤回该联系人邀请。已发送的邀请无法转发或存档。领英精灵-注册 查看并撤回已发送的邀请: 1、点击领英首页顶部的“人脉”图标,点击页面顶部附近的“管理全部邀请”。…

领英常见问题-刚注册的领英账号什么没做就封号了?

使用领英有一段时间的人肯定遇到过这种情况。新注册的领英账号什么都没做就 给封号了,重新注册后又封号,不管注册多少个账号都是这种情况。这时很多人会感 觉很无奈,不知道是什么原因封号的。 领英精灵-注册 首先我们来看看领英封号的常见因…

python 领英爬虫

请勿将爬虫应用于非法活动,保护网络信息安全,人人有责. **1.**一般我们爬取领英都是想爬领英上关于那个公司的所有员工,所以我们有两种方法(我已知的),一个是百度(领英公司名称)&am…