Python批量下载鼠标样式,自动化一条龙处理详解
前情提要
最近发现一款特别好看的壁纸软件,其中提供了鼠标样式,感觉很好看!很精致!心想肯定是请求下载然后启用鼠标样式, 那么发送请求,那不就可以用Python爬虫了吗?
其中鼠标样式下图:

爬虫环境
抓包软件: Fiddler4
编写软件: VS Code
抓包分析请求
这里我抓包用的是Fiddler4,先点击×号清空杂乱的数据:

然后我们打开软件,随便点击一个鼠标样式点击下载,这个时候我们能看到抓包软件有请求出现,点击右边的Inspectors,下方的JSON,诶诶?这是什么?

我们注意下圆圈中是 desk_mouseList ,再结合下方返回的JSON一看,这!就是我们想要的地址呀。我们把JSON拿到JSON格式化网站一看,

隐隐感觉url就是我们要找的东西!复制到浏览器一看,一个压缩包!打开一看,里面就是鼠标样式文件!

你以为就这样就分析完了吗?不不不,远不于此。
这里补给一波常识,一般一个鼠标样式安装文件夹中,必须有一个AutoSetup.inf文件来进行安装文件。
但是!但是!但是!这里没有呀,那我们怎么办?
我这里找来了一个AutoSetup.inf文件的内容:
[Version]
signature="$CHICAGO$"
[DefaultInstall]
CopyFiles = Scheme.Cur
AddReg = Scheme.Reg,Wreg
[DestinationDirs]
Scheme.Cur = 10,"%CUR_DIR%"
[Scheme.Reg]
HKCU,"Control Panel\Cursors\Schemes","%SCHEME_NAME%",,"%10%\%CUR_DIR%\%pointer%,%10%\%CUR_DIR%\%help%,%10%\%CUR_DIR%\%work%,%10%\%CUR_DIR%\%busy%,%10%\%CUR_DIR%\%Cross%,%10%\%CUR_DIR%\%Text%,%10%\%CUR_DIR%\%Hand%,%10%\%CUR_DIR%\%Unavailiable%,%10%\%CUR_DIR%\%Vert%,%10%\%CUR_DIR%\%Horz%,%10%\%CUR_DIR%\%Dgn1%,%10%\%CUR_DIR%\%Dgn2%,%10%\%CUR_DIR%\%move%,%10%\%CUR_DIR%\%alternate%,%10%\%CUR_DIR%\%link%"
[Wreg]
HKCU,"Control Panel\Cursors",,0x00020000,"%SCHEME_NAME%"
HKCU,"Control Panel\Cursors",AppStarting,0x00020000,"%10%\%CUR_DIR%\%work%"
HKCU,"Control Panel\Cursors",Arrow,0x00020000,"%10%\%CUR_DIR%\%pointer%"
HKCU,"Control Panel\Cursors",Crosshair,0x00020000,"%10%\%CUR_DIR%\%Cross%"
HKCU,"Control Panel\Cursors",Hand,0x00020000,"%10%\%CUR_DIR%\%link%"
HKCU,"Control Panel\Cursors",Help,0x00020000,"%10%\%CUR_DIR%\%Help%"
HKCU,"Control Panel\Cursors",IBeam,0x00020000,"%10%\%CUR_DIR%\%Text%"
HKCU,"Control Panel\Cursors",No,0x00020000,"%10%\%CUR_DIR%\%Unavailiable%"
HKCU,"Control Panel\Cursors",NWPen,0x00020000,"%10%\%CUR_DIR%\%Hand%"
HKCU,"Control Panel\Cursors",SizeAll,0x00020000,"%10%\%CUR_DIR%\%move%"
HKCU,"Control Panel\Cursors",SizeNESW,0x00020000,"%10%\%CUR_DIR%\%Dgn2%"
HKCU,"Control Panel\Cursors",SizeNS,0x00020000,"%10%\%CUR_DIR%\%Vert%"
HKCU,"Control Panel\Cursors",SizeNWSE,0x00020000,"%10%\%CUR_DIR%\%Dgn1%"
HKCU,"Control Panel\Cursors",SizeWE,0x00020000,"%10%\%CUR_DIR%\%Horz%"
HKCU,"Control Panel\Cursors",UpArrow,0x00020000,"%10%\%CUR_DIR%\%alternate%"
HKCU,"Control Panel\Cursors",Wait,0x00020000,"%10%\%CUR_DIR%\%busy%"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce\Setup\","",,"rundll32.exe shell32.dll,Control_RunDLL main.cpl @0"
[Scheme.Cur]
"pointer.ani"
"help.cur"
"work.ani"
"busy.ani"
"cross.cur"
"text.cur"
"hand.cur"
"unavailiable.cur"
"vert.cur"
"horz.cur"
"dgn1.cur"
"dgn2.cur"
"move.cur"
"alternate.cur"
"link.cur"
[Strings]
CUR_DIR = "Cursors\卡通简笔"
SCHEME_NAME = "卡通简笔"
pointer = "pointer.ani"
help = "help.cur"
work = "work.ani"
busy = "busy.ani"
cross = "cross.cur"
text = "text.cur"
hand = "hand.cur"
unavailiable = "unavailiable.cur"
vert = "vert.cur"
horz = "horz.cur"
dgn1 = "dgn1.cur"
dgn2 = "dgn2.cur"
move = "move.cur"
alternate = "alternate.cur"
link = "link.cur"
不卖关子啦,我花费了近半小时来找规律,就是最后的CUR_DIR和SCHEME_NAME的值不一样啦!改成鼠标样式的名字叫就行了!
那我们,开干代码!
编写代码:
首先我们请求第一个API接口地址,以此来获取所有的鼠标样式信息列表:
# 获取所有光标下载列表
def getMouseList():
url = "https://pcwallpaper.zhhainiao.com/config/get/by/ckey?ckey=desk_mouseList"
header = {
"Host": "pcwallpaper.zhhainiao.com",
"Connection": "keep-alive",
"Accept": "application/json, text/plain, */*",
"Origin": "https://wallpaper.zhhainiao.com",
"User-Agent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36",
"Content-Type": "application/json;charset=utf-8",
"Referer": "https://wallpaper.zhhainiao.com/3012/beautifyMouse?"
"open_id=1327620721665380352&client=1&os=12&protocol=11",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN",
"keep_alive":"Flase"
}
r = requests.get(url=url, headers=header)
data = json.loads(r.text)["data"].replace('\n', '') # 提取响应json中的光标信息并替换所有换行
mouseList = json.loads(data)
return mouseList
然后我们开始遍历这个列表进行下载!:
# 下载所有光标皮肤
def downZip(mouseList):
if not os.path.exists(path):
os.makedirs(path)
# 遍历光标包名称及下载地址
for dic in mouseList:
print(f'正在下载:{dic["title"]},地址为: {dic["url"]}')
with open(path+dic["title"]+".zip","wb") as f:
z = requests.get(dic["url"]).content
f.write(z)
那么又一个问题来了,下载下来的是压缩包,我们要想创建AutoSetup.inf文件,必须在文件夹中创建啊?看来我们只能用Python来解压zip了!
# 解压所有压缩包
def unZipFile(mouseList):
# 解压所有安装包
for dic in mouseList:
zip_file = zipfile.ZipFile(path+dic["title"]+".zip")
zip_file.extractall(path+dic["title"]+"/")
createAutoSetup(path+dic["title"]+"/",dic["title"]) # 生成安装文件
print(f'正在解压{dic["title"]+".zip"}并生成安装文件...')
最后,我们为每一个文件夹创建AutoSetup.inf文件!
# 生成安装文件
def createAutoSetup(allPath,title):
f = open(allPath+"AutoSetup.inf","w")
fp.seek(0)
fe.seek(0)
f.writelines(fp.readlines())
f.write(f'CUR_DIR = "Cursors\{title}"\nSCHEME_NAME = "{title}"\n')
f.writelines(fe.readlines())
return
完整代码:
链接: https://pan.baidu.com/s/1SXeTZyjuqxqj0wV1uPI0Tg 提取码: p21u
大小仅3KB,莫担心~
展示效果

愉快的使用这些漂亮的鼠标样式吧!
结束语
细心想想,生活中许多重复,繁琐的事情都可以用Python来完成。本次代码中实际到许多知识,抓包和分析,requests库的使用,zipfile库的使用,想练习Python的小伙伴可以试试哦~
Python批量下载鼠标样式,自动化一条龙处理详解的更多相关文章
- 用Python批量下载DACC的MODIS数据
本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...
- centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解
centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解 操作系统:centos 7.2 x86_64 安装walle系统服务端 1.以下安装,均在宿主机( ...
- 全网最详细的PLSQL Developer + Oracle client的客户端 或者 PLSQL Developer + Oracle server服务端的下载与安装过程(图文详解)
不多说,直接上干货! 环境说明: 本地没有安装Oracle服务端,oracle服务端64位,是远程连接,因此本地配置PLSQL Developer64位. Oracle database使用在本机部署 ...
- 【转】Python的hasattr() getattr() setattr() 函数使用方法详解
Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值 ...
- 【python库模块】Python subprocess模块功能与常见用法实例详解
前言 这篇文章主要介绍了Python subprocess模块功能与常见用法,结合实例形式详细分析了subprocess模块功能.常用函数相关使用技巧. 参考 1. Python subprocess ...
- 利用python求解物理学中的双弹簧质能系统详解
利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...
- Python聚类算法之基本K均值实例详解
Python聚类算法之基本K均值实例详解 本文实例讲述了Python聚类算法之基本K均值运算技巧.分享给大家供大家参考,具体如下: 基本K均值 :选择 K 个初始质心,其中 K 是用户指定的参数,即所 ...
- python中利用队列asyncio.Queue进行通讯详解
python中利用队列asyncio.Queue进行通讯详解 本文主要给大家介绍了关于python用队列asyncio.Queue通讯的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细 ...
- Python中生成器和yield语句的用法详解
Python中生成器和yield语句的用法详解 在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况.一些话题("if/else控制流" ...
- python编写微信公众号首图思路详解
前言 之前一直在美图秀秀调整自己的微信公众号首图,效果也不尽如人意,老是调来调去,最后发出来的图片被裁剪了一大部分,丢失部分关键信息,十分恼火,于是想着用python写一个程序,把微信公众号首图的模式 ...
随机推荐
- Kustomize 生产实战-注入监控 APM Agent
Kustomize 简介 Kubernetes 原生配置管理工具, 它自定义引入了一种无需模板的方式来定制应用程序配置,从而简化了对现成应用程序的使用.目前,在kubectl中内置了,通过 apply ...
- 5分钟带你彻底搞懂async底层实现原理!
ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖.研究 async 的原理,就必须先弄清楚 Genera ...
- 【LeetCode动态规划#02】图解不同路径I + II(首次涉及二维dp数组,)
不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ). 机器人每次只能向下或者向右移 ...
- odoo 开发入门教程系列-一些用户界面
一些用户界面 数据文件 (XML) 参考: 该主题关联文档可以查看Data Files. 上一章,我们通过CSV文件添加了数据.当需要添加数据格式简单时,用CSV格式还是很方便的,当数据格式更复杂时( ...
- 机器学习基础05DAY
分类算法之k-近邻 k-近邻算法采用测量不同特征值之间的距离来进行分类 优点:精度高.对异常值不敏感.无数据输入假定 缺点:计算复杂度高.空间复杂度高 使用数据范围:数值型和标称型 一个例子弄懂k-近 ...
- 可视化漂亮大屏Excel表格模板 Excel漂亮美观看板 excel电视看板 excel精美数据展示看板
企业管理者喜欢大屏看板主要是因为它可以提供以下几个方面的优势: 增强企业形象:大屏看板可以将企业的信息和广告以更加生动.直观的方式呈现出来,提高企业形象和知名度. 提高工作效率:大屏看板可以在企业内部 ...
- hdfs集群的扩容和缩容
目录 1.背景 2.集群黑白名单 3.准备一台新的机器并配置好hadoop环境 3.1 我们现有的集群规划 3.2 准备一台新的机器 3.2.1 查看新机器的ip 3.2.2 修改主机名和host映射 ...
- Java面向对象--接口和多态
final 关键字 最终修饰符 可以修饰 类 方法 变量 被final修饰后不能被继承 重写 二次赋值 修饰类时 该类不可以被继承 修饰方法时 该方法不能被重写 修饰变量时, 该变量只能赋值一次, 不 ...
- flask-wtf使用
Web应用程序的一个重要方面是为用户提供一个用户界面.HTML提供了一个 标签,用于设计一个接口.一个Form 元素,例如文本输入,单选框等可以适当地使用. 通过GET或POST方法将用户输入的数据以 ...
- python入门教程之十七进程、线程和协程
进程 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次 ...