打python&adb组合拳,实现微信读书永久免费读
用过“微信读书”的朋友都知道,如果我们想阅读全本的付费书籍,除了购买整本(使用书币)外,还可以使用无限卡。可无论是购买全书还是无限卡,归根结底都是要花银子的。
除此之外,还有一种方式——用阅读时长兑换书币。根据目前微信读书的兑换策略,阅读半个小时,即可兑换1枚赠币,每周最多可兑换10枚赠币。因此,理论上每周我们可以使用5个小时的时间,获得最多10元等价书币。
本篇文章博主就教大家一种方法,通过模拟书籍的手动翻页,快速免费获得书币的方法,该方法仅适用于Android平台。
首先要配置好Android SDK环境变量和Python环境,最关键的是可以正常使用adb命令。这一步就不再赘述了,这里简要说明一下模拟翻页的原理,注意看下面一行命令:
adb shell input swipe 1000 600 200 600
这一行指令包含两部分操作:
- adb shell:进入设备的Shell命令行;
- input swipe 1000 600 200 600:模拟屏幕滑动,从x=1000,y=600坐标处滑动到x=200,y=600坐标处。即从右向左滑屏,也就是翻页的触摸操作;
好了,理解了这行命令后,剩下的事情就好办多了。我们只需要间隔一段时间,循环执行这句话即可。即将下面两行命令放在循环中,循环的次数由书籍的未读页数决定。
1 time.sleep(random.uniform(rv_t1,rv_t2)) 2 run(\'adb shell input swipe 1000 600 200 600\', shell=True)
为了尽量模拟人类阅读的真实性,这里的时间间隔是给定时间范围内的随机值。
最后,为了更方便地使用这个脚本,除了正序(即从右向左滑屏)外,还增加了倒序(即从左向右滑屏)和无尽模式(即正序结束后自动倒序,倒序结束后自动正序,循环往复)。完整的Python脚本如下:
1 # encoding:utf-8 2 3 4 from subprocess import run 5 import time 6 import random 7 import os 8 9 def book(rv_sel, rv_page_num, rv_t1, rv_t2): 10 rv_sel = int(rv_sel) 11 if rv_sel == 1: 12 print(\'程序运行中\') 13 for i in range(rv_page_num): 14 time.sleep(random.uniform(rv_t1,rv_t2)) 15 run(\'adb shell input swipe 1000 600 200 600\', shell=True) 16 n = i + 1 17 print(\'总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页\' % (rv_page_num, n, rv_page_num - n)) 18 exit() 19 elif rv_sel == 2: 20 print(\'程序运行中\') 21 for i in range(rv_page_num): 22 time.sleep(random.uniform(rv_t1,rv_t2)) 23 run(\'adb shell input swipe 200 600 1000 600\', shell=True) 24 n = i + 1 25 print(\'总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页\' % (rv_page_num, n, rv_page_num - n)) 26 exit() 27 else: 28 print() 29 print(\'* \' * 8, \'1.正循环-倒循环,无限循环\', \'* \' * 8) 30 print(\'* \' * 8, \'2.倒循环-正循环,无限循环\', \'* \' * 8) 31 print() 32 loop = int(input(\'请选择循环方式:\')) 33 print(\'程序运行中\') 34 if loop == 1: 35 while 1: 36 for i in range(rv_page_num): 37 time.sleep(random.uniform(rv_t1,rv_t2)) 38 run(\'adb shell input swipe 1000 600 200 600\', shell=True) 39 n = i + 1 40 print(\'总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页\' % (rv_page_num, n, rv_page_num - n)) 41 for i in range(rv_page_num): 42 time.sleep(random.uniform(rv_t1,rv_t2)) 43 run(\'adb shell input swipe 200 600 1000 600\', shell=True) 44 n = i + 1 45 print(\'总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页\' % (rv_page_num, n, rv_page_num - n)) 46 else: 47 while 1: 48 for i in range(rv_page_num): 49 time.sleep(random.uniform(rv_t1,rv_t2)) 50 run(\'adb shell input swipe 200 600 1000 600\', shell=True) 51 n = i + 1 52 print(\'总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页\' % (rv_page_num, n, rv_page_num - n)) 53 for i in range(rv_page_num): 54 time.sleep(random.uniform(rv_t1,rv_t2)) 55 run(\'adb shell input swipe 1000 600 200 600\', shell=True) 56 n = i + 1 57 print(\'总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页\' % (rv_page_num, n, rv_page_num - n)) 58 59 def rand_time(rv_xh): 60 if int(rv_xh) == 1: 61 return 10,20 62 else: 63 while 1: 64 t1 = int(input(\'请输入最小等待时间:\')) 65 t2 = int(input(\'请输入最大等待时间:\')) 66 if t2 >= t1: 67 return t1,t2 68 break 69 else: 70 print(\'最小时间不得小于最大时间,请重新输入\') 71 72 print(\'* \' * 50,) 73 print(\'请选择翻页间隔时间:\') 74 print(\'1.预设(10秒 - 20秒之间):\') 75 print(\'2.自定义(大于0):\',) 76 print(\'* \' * 50,) 77 while 1: 78 xh = input(\'请输入序号:\') 79 if xh == \'\': 80 print(\'输入有误,请重新输入\') 81 elif xh in str([1,2]): 82 t1,t2 = rand_time(xh) 83 break 84 else: 85 print(\'输入有误,请重新输入\') 86 while 1: 87 print() 88 print(\'* \' * 8, \'1.正序\', \'* \' * 8) 89 print(\'* \' * 8, \'2.倒序\', \'* \' * 8) 90 print(\'* \' * 8, \'3.无尽\', \'* \' * 8) 91 print() 92 sel = input(\'请选择翻书方式:\') 93 if sel in str([1,2,3]): 94 page_num = int(input(\'请输入书籍总页数:\')) 95 book(sel,page_num,t1,t2) 96 elif sel == \'\': 97 print(\'输入错误\') 98 else: 99 print(\'输入错误\')
下面开始连接真机,然后启动App,随便打开一本书,最后打开命令行,运行这个Python脚本吧!提醒一下:不要忘了去兑换书币,否则这些努力就白费了。
最后,请广大读者在经济允许的情况下购买正版书籍,支持作者和出版社。