用過“微信讀書”的朋友都知道,如果我們想閱讀全本的付費書籍,除了購買整本(使用書幣)外,還可以使用無限卡。可無論是購買全書還是無限卡,歸根結底都是要花銀子的。
除此之外,還有一種方式——用閱讀時長兌換書幣。根據目前微信讀書的兌換策略,閱讀半個小時,即可兌換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腳本吧!提醒一下:不要忘了去兌換書幣,否則這些努力就白費了。
最后,請廣大讀者在經濟允許的情況下購買正版書籍,支持作者和出版社。
