小红书扫码登录分析与python实现

文章目录

  • 1. 写在前面
  • 2. 接口分析
  • 3. 代码实现

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

1. 写在前面

  今天周末,抽时间更一下之前分析过的红薯扫码协议登录。思路反正是这么个思路,此类的应用场景很多。将登录后的CK给到爬虫采集使用,这样的一个闭环,在爬虫领域的圈子内基本很多工程师都用过。本期文章作者主要讲解分析过程与实现思路

2. 接口分析

首先打开Web端页面,会自动弹出一个二维码登录框,可以扫码并在手机点击确认登录。这里我们分析一下接口发包请求,如下所示:

在这里插入图片描述

create这个即二维码生成接口,但是不同于其他网站,有固定的二维码URL,将码图片生成并存储在本地。接口也有一个登录的URL直链,码的话则是通过JS渲染生成的。当然有这个URL就够了,接口响应数据如下所示:

在这里插入图片描述

这里需要注意比较重要的三个字段,都将在后续使用上!qr_id、code你可以理解为二维码的标识,唯一且动态生成,即一码一ID!url登录链接,不是二维码链接!没有现成的二维码图或直链没有关系,我们可以使用Python生成二维码联动登录直链

一般扫码登录不知道大家有没有了解过,一张二维码创建出来后,一般是有一个服务会不断扫,扫什么?扫用户是否扫码、是否登录、码状态是否失效等等

所以这里也是一样,页面刷新生成二维码那一刻起,可以看到监测二维码状态一直在请求,直到二维码失效。这部分也是我们接下来需要构造实现的,如下所示:

在这里插入图片描述

这里的码状态监测请求频率在一秒钟扫一次,注意最好也保持在这个频率去构造监测二维码状态的请求

在这里插入图片描述

监测二维码状态的接口响应主要就是码是否被扫描了、是否确认登录了、登录是否成功了的一系列反馈。主要体现在code_status这个字段

0是二维码未被扫描、1是二维码已被扫描,但是待确认登录、2是登录成功、3则是码已经失效

3. 代码实现

  流程实现主要涉及到两个接口,倒不是特别复杂。唯一需要分析与技术攻关的就是请求头内的x-s参数,这个是在生成二维码信息以及监测二维码状态请求中必须的一个参数,动态加密生成的

这个参数的话作者在很早之前就分别完成了补环境跟纯算分析还原,这里就不再复述。感兴趣的可以阅读之前的文章:x-s与x-s-common参数分析

在这里插入图片描述

扫码登录的话它只监测x-s,不用去管x-s-c这个参数,这个参数在请求的时候可以不携带!接下来我们先实现二维码创建,通过create接口生成二维码信息,代码实现如下:

# -*- coding: utf-8 -*-import execjs
import qrcode
import requests
from PIL import Image
from io import BytesIOdef get_xs(url, data):a1 = '' # 自行获取with open("xsAndxscommon.js", encoding='utf-8') as f:ctx = execjs.compile(f.read())res = ctx.call("getXs",url,data,a1)return resdef generate_qrcode():headers = {# 自动获取}url = '' # 自动获取api = "/api/sns/web/v1/login/qrcode/create"data = {"qr_type": 1}sign = get_signature(api, data)headers['x-s'] = sign['x-s']data = json.dumps(data, separators=(',', ':'))json_data = self.session.post(url, headers=headers, data=data).json()code = json_data.get('code', -1)if code == 0:data = json_data.get('data', {})if data:logger.log('INFOR', f'二维码生成完成!信息如下: {json_data}')code = data.get('code', '')qr_id = data.get('qr_id', '')loginurl = data.get('url', '')qr = qrcode.QRCode()qr.add_data(loginurl)img = qr.make_image()a = BytesIO()img.save(a, 'png')png = a.getvalue()a.close()t = showpng(png)t.start()login_status_monitor(code, qr_id)else:logger.log('ERROR', f'二维码生成出现异常: {json_data}')

在创建生成二维码时,请求的cookie信息,是没有登录的,可以使用网站固定的即可!上面程序运行后会弹出一张二维码,等待扫描

另外可以看到代码中有一个方法login_status_monitor则是在生成码之后就需要调用的,模拟对码扫描状态的监测,这一部分的代码实现如下所示:

def login_status_monitor(code, qr_id):while True:cookies = {# 自行获取}url = "" # 自行获取监测接口URLparams = {"qr_id": qr_id,"code": code}api = api = f'/api/sns/web/v1/login/qrcode/status?qr_id={qr_id}&code={code}'sign = get_xs(url=api, data='')headers.update(sign)response = requests.get(url, headers=headers, cookies=cookies, params=params).json()logger.info(response)code_status = response["data"]["code_status"]if code_status == 0:logger.info("【二维码等待扫描】")elif code_status == 1:logger.info("【已扫码,请确认登录】")elif code_status == 2:logger.info("【登录成功】")breakelif code_status == 3:logger.info("【二维码已失效】")time.sleep(1)

扫码状态的监测需要注意的点就是保持与Web站点时间频率一致,然后每一次构造请求都需要使用最新生成的x-s参数,不然是不行的

接下来,运行程序则会弹出二维码,掏出你的手机扫码并点击确认登录,即可完成!监测二维码状态的服务日志如下所示:

在这里插入图片描述

作者个人的的话,将它做成了一个Web服务,部署到了一台云服务上面,不管在何时何地只要作者打开手机访问就能看到二维码,如下所示:

在这里插入图片描述

手机浏览器刷新就会生成创建出一张新的码。作者平日里,周末的时候啥的,可能会需要获取一两篇爆款的笔记,学习研究一下别的博主是如何创作笔记的,然后就是看看最新的爆款方向啥的。所以这个扫码登录功能还对接了数据获取的爬虫服务

在这里插入图片描述

总之所有的一切一切,都是为了学习!使用技术手段学习自然是Buff加层。最后,今天的技术分享就到这里了,祝大家周末愉快!如果对你有帮助给个赞吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第十七天(二叉树IV)| 110. 平衡二叉树、257. 二叉树的所有路径、404.左叶子之和(JAVA)

文章目录 110. 平衡二叉树解题思路源码 257. 二叉树的所有路径解题思路源码 404.左叶子之和解题思路源码 110. 平衡二叉树 给定一个二叉树,判断它是否是平衡二叉树 示例 1: 输入:root [3,9,20,null,null,15,7]输出:true 示例…

伊理威科技:抖音开网店新手刚做选啥品

在数字浪潮中,抖音不仅是展示才艺的舞台,更是创业者的新天地。新手若想在这片热土上开垦网店,选品便是首要课题。选择产品如同种下希望的种子,既要考量土壤肥沃度,也得预测风雨适宜期。 兴趣与专长是选品的罗盘。热爱所…

鸿蒙Harmony应用开发—ArkTS(@Extend装饰器:定义扩展组件样式)

在前文的示例中,可以使用Styles用于样式的扩展,在Styles的基础上,我们提供了Extend,用于扩展原生组件样式。 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用。 装饰器使用说明 语法 Extend(UI…

光速论文能用吗 #媒体#知识分享#学习方法

光速论文是一个非常有效的论文写作、查重降重工具,它的使用非常简单方便,而且功能强大,是每个写作者必备的利器。 首先,光速论文具有强大的查重降重功能,能够快速检测论文中的抄袭部分,帮助作者避免不必要的…

用BSP优化3D渲染

3D渲染引擎设计者面临的最大问题之一是可见性计算:只必须绘制可见的墙壁和物体,并且必须以正确的顺序绘制它们(应该在远处的墙壁前面绘制近墙) 。 更重要的是,对于游戏等应用程序来说,开发能够快速渲染场景…

YOLO-v8-seg实例分割使用

最近需要实例分割完成一些任务,一直用的SAM(segment anything)速度慢,找一个轻量分割模型。 1. YOLO-v8-seg使用 git clone https://github.com/ultralytics/ultralytics.git cd ultralytics vim run.py from ultralytics import YOLO# L…

Python虚拟环境conda的安装使用

文章目录 conda虚拟环境的详细步骤和注意事项:**安装Conda****创建Conda虚拟环境****激活Conda虚拟环境****安装Python包****管理Conda环境****其他优势与特性** 相较于venv,使用conda管理虚拟环境有以下优势:**性能****资源占用****其他性能…

nodejs安装使用React

1、react安装 首先,确保电脑上具备nodejs环境,之后用 winr 呼出控制台,输入 cmd 命令弹出cmd控制台(小黑框)之后在默认路径输入如下代码 npm i -g create-react-app //全局安装react环境无需选择特定文件夹安装成功后…

深度学习-2.9梯度不稳定和Glorot条件

梯度不稳定和Glorot条件 一、梯度消失和梯度爆炸 对于神经网络这个复杂系统来说,在模型训练过程中,一个最基础、同时也最常见的问题,就是梯度消失和梯度爆炸。 我们知道,神经网络在进行反向传播的过程中,各参数层的梯…

ADW300多功能无线计量仪表

仪表应用背景 电力运维行业:运维服务系统实时采集大量用户站的运行和动环数据,经专业数据分析,当用户站发生异常情况或运行故障时,及时反馈到运维指挥中心,并通过移动终端通知相应的运维工程师,指导现场作…

浅谈Javascript虚拟列表(virtaul list)改造成虚拟表格(virtaul table)的技术

前端加载百万条数据列表,如果采用真实的DOM插入100万个div(或li)标签,肯定是非常卡顿的。这就不得不使用虚拟列表技术方案,但是虚拟列表技术方案网上有很详细的实现方法,今天我就来谈谈根据网上的方案&…

Docker - 哲学 默认网络和 自定义网络 与 linux 网络类型 和 overlay2

默认网络:不指定 --nerwork 不指定 网络 run 一个容器时,会直接使用默认的网络桥接器 (docker0) 自定义网络:指定 --nerwork 让这两台容器互相通信 的前提 - 共享同一个网络 关于 ip addr 显示 ens160 储存驱动 ov…

入门linux之Ubuntu学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1、介绍Ubuntu2、虚拟机目录解析3、常用指令ls:罗列当前目录文件信息对ls -l 的结果解析1.第一个字符2.每三个字符(第一个字符后&#x…

jmeter超高并发报错解决方法

1、比如jmeter设置并发量为5000,运行后报错socket closed。原因是客户端与服务端做了三次握手之后,后面不需要握手了,但是jmeter没有这个功能,5000个并发每次发接口请求都是独立的,jmeter端口处理不了这么大量的请求&a…

Android视角看鸿蒙第八课(module.json5中的各字段含义之abilities)下

Android视角看鸿蒙第八课(module.json5中的各字段含义之abilities)下 导读 上篇文章开始学习abilities下的各字段含义,因为篇幅原因只学习了name、srcEntry、description、icon和label字段的含义和用法, 这篇文章继续学习和了解其他字段。 …

GPT4.0

GPT4.0 支持官网所有功能以及所有第三方GPTS,完全同步官网。无需魔法,填写授权码直达官网。全天超18小时维护,无需担心不稳定。没有永久卡,3.5免费提供,4.0可以按需下单即可,不存在跑路。 需要的联系

格瑞纳电子邀您参观2024杭州快递物流展

2024长三角快递物流供应链与技术装备展览会 2024.7.8-10 杭州国际博览中心 参展企业介绍 北京格瑞纳电子产品有限公司是一家立足于专业科学技术领域集产品代理、培训咨询和个性化增值服务的高科技公司,于2009年成立于北京,立足于复杂系统仿真领域&…

皓学IT:WEB06_ EL表达式JSTL标签库

一、EL表达式 1.1.特点 是一个由java开发的工具包 用于从特定域对象中读取并写入到响应体开发任务,不能向域对象中写入。 EL工具包自动存在Tomcat的lib中(el-api.jar),开发是可以直接使用,无需其他额外的包。 标准…

seleniumUI自动化实例(登录CSDN页面)

今天分享一个CSDN登录模块的登录场景 1.配置文件 CSDNconf.py: from selenium import webdriver options webdriver.ChromeOptions() options.binary_location r"D:\Program Files\360\360se6\Application\360se.exe" # 360浏览器安装地址 driver w…

电脑审计系统知多少

域智盾的电脑审计系统是一款功能强大的软件,主要用于监控和审计电脑的使用情况。通过安装该系统,组织能够全面了解员工的电脑活动。 首先,该系统能够详细记录用户的上网记录,包括访问的网站、浏览的网页内容等。这使得管理员可以监…