[python] 1、python鼠标点击、移动事件应用——写一个自动下载百度音乐的程序

简介:


 

1、问题描述:

最近百度总爱做一些破坏用户信任度的事——文库金币变券、网盘限速,吓得我赶紧想办法把存在百度云音乐中的歌曲下载到本地。

http://yinyueyun.baidu.com/

可问题是云音乐中并没有批量下载,而上面我总共存了700多首音乐!

因此:有必要写一个脚本自动下载这些音乐了!!!

 

2、解决问题

自动下载歌曲有两种方法:

  • JS法
  • 模拟鼠标点击法

由于考虑到JS法需要分析网页结构、寻找下载链接,工作量有点大,于是选择用模拟鼠标点击法!

在linux上我首先想到用python来做这件事。

用python使用鼠标点击事件比较简单,在github上有人开源了一个PyMouse模块,简单几行代码就能模拟鼠标!

https://github.com/pepijndevos/PyMouse/wiki/Documentation

该PyMouse有个简单的DEMO:

复制代码
 1 # import the module
 2 from pymouse import PyMouse
 3 
 4 # instantiate an mouse object
 5 m = PyMouse()
 6 
 7 # move the mouse to int x and int y (these are absolute positions)
 8 m.move(200, 200)
 9 
10 # click works about the same, except for int button possible values are 1: left, 2: right, 3: middle
11 m.click(500, 300, 1)
12 
13 # get the screen size
14 m.screen_size()
15 # (1024, 768)
16 
17 # get the mouse position
18 m.position()
19 # (500, 300)
复制代码

因此,编写一个可以自动下载一页歌曲(20首)的脚本如下:

该代码所做的主要任务是点击下载,然后再点击确定:

注:如果只是两次点击如何解释21、22行代码?

因为点击下载之后,会有个选择下载音质的弹框,音质有高、中、低三种,但是有些歌曲只有一种或两种音质可以选择。这导致弹框的位置有所不同(确定按钮的位置也随之不同),解决此问题一个“笨”方法是将可能区域都点一遍!

复制代码
 1 # import the module
 2 from pymouse import PyMouse
 3 from time import sleep
 4 
 5 # instantiate an mouse object
 6 m = PyMouse()
 7 
 8 pos_x = 1120
 9 pos_y = 302
10 pos_y_add = 38
11 one_page_lines = 20
12 
13 select_button_x = 984
14 select_button_y = 550
15 
16 sleep(2)
17 
18 for i in range(0,one_page_lines):
19     m.click(pos_x,pos_y+i*38,1)
20     sleep(2)
21     for j in range(0,30):
22         m.click(select_button_x,select_button_y+j*5,1)
23     sleep(3)
24     print(i)
复制代码

 

3、遗留问题

上面脚本能在网速良好情况下将一页的歌曲下载到本地,接下来自然想到的是模拟鼠标拖动(拖动slide bar,切换至下一页20首歌曲)。

于是我尝试写一个模拟鼠标拖动的脚本做个测试:

复制代码
 1 # import the module
 2 from pymouse import PyMouse
 3 from time import sleep
 4 
 5 # instantiate an mouse object
 6 m = PyMouse()
 7 
 8 pos_x = 1120
 9 pos_y = 302
10 pos_y_add = 38
11 one_page_lines = 20
12 
13 select_button_x = 984
14 select_button_y = 550
15 
16 slide_x = 1915
17 slide_y = 312
18 slide_dis = 1
19 
20 sleep(5)
21 for page in range(1,40):
22     m.press(slide_x,slide_y)
23     slide_y = slide_y + slide_dis
24     m.move(slide_x,slide_y)
25     m.release(slide_x,slide_y)
26     sleep(10)
27 
复制代码

理论上每次滑动slide bar歌曲list移动的距离是相同的,而实测发现存在没有规律的误差!

由于第二节中下载歌曲的脚本鼠标点击的start位置是固定的,因此一旦不能利用slide bar移动使歌曲列表恰好切到下一页,就会导致下载脚本点击事件点错地方。

后续优化方向可以利用图像识别对slide bar移动进行校准~


本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/6942729.html,如需转载请自行联系原作者

相关文章
|
4天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
22 1
|
13天前
|
机器学习/深度学习 人工智能 算法
图像处理与分析:Python中的计算机视觉应用
【4月更文挑战第12天】Python在计算机视觉领域广泛应用,得益于其丰富的库(如OpenCV、Pillow、Scikit-image)和跨平台特性。图像处理基本流程包括获取、预处理、特征提取、分类识别及重建生成。示例代码展示了面部和物体检测,以及使用GAN进行图像生成。
|
1天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
4天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
12 1
Flask框架在Python面试中的应用与实战
|
5天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python构建简单的图像识别应用
本文将介绍如何利用Python语言及其相关库来构建一个简单但功能强大的图像识别应用。通过结合OpenCV和深度学习模型,我们将展示如何实现图像的特征提取和分类,从而实现对图像中物体的自动识别和分类。无需复杂的算法知识,只需一些基本的Python编程技巧,你也可以轻松地创建自己的图像识别应用。
|
6天前
|
数据采集 JavaScript 前端开发
使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
|
7天前
|
测试技术 Python
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
|
7天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
16 0
|
8天前
|
数据挖掘 vr&ar Python
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
34 10
|
8天前
|
机器学习/深度学习 数据采集 供应链
从数据到决策:scikit-learn在业务分析中的应用
【4月更文挑战第17天】本文探讨了scikit-learn在业务分析中的应用,包括数据预处理、分类、回归和聚类模型的构建,以及模型评估与优化。通过使用scikit-learn,企业能有效处理数据、预测趋势、客户细分并制定决策,从而提升经营效率和市场策略。随着机器学习的发展,scikit-learn在业务分析领域的潜力将持续释放,创造更多价值。