码迷,mamicode.com
首页 > 微信 > 详细

打python&adb组合拳,实现微信读书永久免费读

时间:2019-10-28 16:17:42      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:port   序号   次数   启动   理解   完整   nbsp   RoCE   shell命令   

用过“微信读书”的朋友都知道,如果我们想阅读全本的付费书籍,除了购买整本(使用书币)外,还可以使用无限卡。可无论是购买全书还是无限卡,归根结底都是要花银子的。

除此之外,还有一种方式——用阅读时长兑换书币。根据目前微信读书的兑换策略,阅读半个小时,即可兑换1枚赠币,每周最多可兑换10枚赠币。因此,理论上每周我们可以使用5个小时的时间,获得最多10元等价书币。

本篇文章博主就教大家一种方法,通过模拟书籍的手动翻页,快速免费获得书币的方法,该方法仅适用于Android平台。

首先要配置好Android SDK环境变量和Python环境,最关键的是可以正常使用adb命令。这一步就不再赘述了,这里简要说明一下模拟翻页的原理,注意看下面一行命令:

adb shell input swipe 1000 600 200 600

这一行指令包含两部分操作:

  1. adb shell:进入设备的Shell命令行;
  2. 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脚本吧!提醒一下:不要忘了去兑换书币,否则这些努力就白费了。

最后,请广大读者在经济允许的情况下购买正版书籍,支持作者和出版社。

 

打python&adb组合拳,实现微信读书永久免费读

标签:port   序号   次数   启动   理解   完整   nbsp   RoCE   shell命令   

原文地址:https://www.cnblogs.com/wenhanxiao/p/11752785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!