打python&adb組合拳,實現微信讀書永久免費讀


用過“微信讀書”的朋友都知道,如果我們想閱讀全本的付費書籍,除了購買整本(使用書幣)外,還可以使用無限卡。可無論是購買全書還是無限卡,歸根結底都是要花銀子的。

除此之外,還有一種方式——用閱讀時長兌換書幣。根據目前微信讀書的兌換策略,閱讀半個小時,即可兌換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腳本吧!提醒一下:不要忘了去兌換書幣,否則這些努力就白費了。

最后,請廣大讀者在經濟允許的情況下購買正版書籍,支持作者和出版社。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM