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

为了解决百度音乐无法批量下载的问题,本文通过Python的PyMouse模块模拟鼠标点击事件,实现自动下载页面上的音乐。代码包括点击下载按钮并处理不同音质选择的弹窗,但遇到滑动滚动条时的定位误差,提出了使用图像识别进行优化的可能性。
摘要由CSDN通过智能技术生成

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 importPyMouse3

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 importPyMouse3 from time importsleep4

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 inrange(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 importPyMouse3 from time importsleep4

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_dis24 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://blog.beautifulzzzz.com

园友交流群:414948975

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值