[python] 1、python鼠标点击、移动事件应用——写一个自动下载百度音乐的程序-阿里云开发者社区

开发者社区> 史迪奇2号> 正文

[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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
z3-solver求解器
一个非常高级的工具,SMT求解器。应用领域非常广,解各类方程,解各类编程问题(例如解数独),解逻辑题等都不在话下。
13 0
小刚带你深入浅出理解Lua语言
前言这篇文章并不是针对某个知识点深入剖析,而是聚焦在Lua语言的关键知识点覆盖和关键使用问题列举描述。能够让学习者对Lua整体有个认识(使用一门新的语言不仅仅在用的时候适应它,而是知道怎么善于使用它),同时也可以作为一个工具文档在Lua中遇到具体问题的时候能从这里索引到相应的知识点和Lua的一些原理,得到启发。 1、Lua语言的特点简单的说Lua语言是一个可扩展的嵌入型的脚本语言。它具有以下的特点
4 0
陈天奇等人提出AutoTVM:让AI来编译优化AI系统底层算子
时的深度学习并没有现在那么火热,也没有现有的 GPU 卷积实现,我在实验室的 GTX 470 上面第一次手写 GPU 卷积用以支持卷积 RBM,当时针对 CPU 十多倍的加速比让我兴奋不已。
4 0
基于注意力机制,机器之心带你理解与训练神经机器翻译系统
本文是机器之心 GitHub 实现项目,我们根据谷歌的 Transformer 原论文与 Harvard NLP 所实现的代码学习构建了一个神经机器翻译系统。因此,我们希望各位读者也能根据这篇文章了解 Transformer 的架构,并动手实现一个神经机器翻译系统。
8 0
小刚带你深入浅出理解Lua语言
前言这篇文章并不是针对某个知识点深入剖析,而是聚焦在Lua语言的关键知识点覆盖和关键使用问题列举描述。能够让学习者对Lua整体有个认识(使用一门新的语言不仅仅在用的时候适应它,而是知道怎么善于使用它),同时也可以作为一个工具文档在Lua中遇到具体问题的时候能从这里索引到相应的知识点和Lua的一些原理,得到启发。 1、Lua语言的特点简单的说Lua语言是一个可扩展的嵌入型的脚本语言。它具有以下的特点
5 0
小刚带你深入浅出理解Lua语言
前言这篇文章并不是针对某个知识点深入剖析,而是聚焦在Lua语言的关键知识点覆盖和关键使用问题列举描述。能够让学习者对Lua整体有个认识(使用一门新的语言不仅仅在用的时候适应它,而是知道怎么善于使用它),同时也可以作为一个工具文档在Lua中遇到具体问题的时候能从这里索引到相应的知识点和Lua的一些原理,得到启发。 1、Lua语言的特点简单的说Lua语言是一个可扩展的嵌入型的脚本语言。它具有以下的特点
3 0
小刚带你深入浅出理解Lua语言
前言这篇文章并不是针对某个知识点深入剖析,而是聚焦在Lua语言的关键知识点覆盖和关键使用问题列举描述。能够让学习者对Lua整体有个认识(使用一门新的语言不仅仅在用的时候适应它,而是知道怎么善于使用它),同时也可以作为一个工具文档在Lua中遇到具体问题的时候能从这里索引到相应的知识点和Lua的一些原理,得到启发。 1、Lua语言的特点简单的说Lua语言是一个可扩展的嵌入型的脚本语言。它具有以下的特点
5 0
7. ✎会查新华字典不?会。Python字典已经掌握了
7. ✎会查新华字典不?会。Python字典已经掌握了
5 0
小刚带你深入浅出理解Lua语言
前言这篇文章并不是针对某个知识点深入剖析,而是聚焦在Lua语言的关键知识点覆盖和关键使用问题列举描述。能够让学习者对Lua整体有个认识(使用一门新的语言不仅仅在用的时候适应它,而是知道怎么善于使用它),同时也可以作为一个工具文档在Lua中遇到具体问题的时候能从这里索引到相应的知识点和Lua的一些原理,得到启发。 1、Lua语言的特点简单的说Lua语言是一个可扩展的嵌入型的脚本语言。它具有以下的特点
4 0
752
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载