软件测试自动化测试编程二三事

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

2019-10-28  本文已影响0人  萧文翰

用过“微信读书”的朋友都知道,如果我们想阅读全本的付费书籍,除了购买整本(使用书币)外,还可以使用无限卡。可无论是购买全书还是无限卡,归根结底都是要花银子的。
除此之外,还有一种方式——用阅读时长兑换书币。根据目前微信读书的兑换策略,阅读半个小时,即可兑换1枚赠币,每周最多可兑换10枚赠币。因此,理论上每周我们可以使用5个小时的时间,获得最多10元等价书币。
本篇文章博主就教大家一种方法,通过模拟书籍的手动翻页,快速免费获得书币的方法,该方法仅适用于Android平台。
首先要配置好Android SDK环境变量和Python环境,最关键的是可以正常使用adb命令。这一步就不再赘述了,这里简要说明一下模拟翻页的原理,注意看下面一行命令:

adb shell input swipe 1000 600 200 600

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

time.sleep(random.uniform(rv_t1,rv_t2))
run('adb shell input swipe 1000 600 200 600', shell=True)

为了尽量模拟人类阅读的真实性,这里的时间间隔是给定时间范围内的随机值。
最后,为了更方便地使用这个脚本,除了正序(即从右向左滑屏)外,还增加了倒序(即从左向右滑屏)和无尽模式(即正序结束后自动倒序,倒序结束后自动正序,循环往复)。完整的Python脚本如下:

# encoding:utf-8


from subprocess import run
import time
import random
import os

def book(rv_sel, rv_page_num, rv_t1, rv_t2):
    rv_sel = int(rv_sel)
    if rv_sel == 1:
        print('程序运行中')
        for i in range(rv_page_num):
            time.sleep(random.uniform(rv_t1,rv_t2))
            run('adb shell input swipe 1000 600 200 600', shell=True)
            n = i + 1
            print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n))
        exit()
    elif rv_sel == 2:
        print('程序运行中')
        for i in range(rv_page_num):
            time.sleep(random.uniform(rv_t1,rv_t2))
            run('adb shell input swipe 200 600 1000 600', shell=True)
            n = i + 1
            print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n))
        exit()
    else:
        print()
        print('* ' * 8, '1.正循环-倒循环,无限循环', '* ' * 8)
        print('* ' * 8, '2.倒循环-正循环,无限循环', '* ' * 8)
        print()
        loop = int(input('请选择循环方式:'))
        print('程序运行中')
        if loop == 1:
            while 1:
                for i in range(rv_page_num):
                    time.sleep(random.uniform(rv_t1,rv_t2))
                    run('adb shell input swipe 1000 600 200 600', shell=True)
                    n = i + 1
                    print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n))
                for i in range(rv_page_num):
                    time.sleep(random.uniform(rv_t1,rv_t2))
                    run('adb shell input swipe 200 600 1000 600', shell=True)
                    n = i + 1
                    print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n))
        else:
            while 1:
                for i in range(rv_page_num):
                    time.sleep(random.uniform(rv_t1,rv_t2))
                    run('adb shell input swipe 200 600 1000 600', shell=True)
                    n = i + 1
                    print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n))
                for i in range(rv_page_num):
                    time.sleep(random.uniform(rv_t1,rv_t2))
                    run('adb shell input swipe 1000 600 200 600', shell=True)
                    n = i + 1
                    print('总计需翻阅 %d 页,已翻阅 %d 页,剩余 %d 页' % (rv_page_num, n, rv_page_num - n))

def rand_time(rv_xh):
    if int(rv_xh) == 1:
        return 10,20
    else:
        while 1:
            t1 = int(input('请输入最小等待时间:'))
            t2 = int(input('请输入最大等待时间:'))
            if t2 >= t1:
                return t1,t2
                break
            else:
                print('最小时间不得小于最大时间,请重新输入')

print('* ' * 50,)
print('请选择翻页间隔时间:')
print('1.预设(10秒 - 20秒之间):')
print('2.自定义(大于0):',)
print('* ' * 50,)
while 1:
    xh = input('请输入序号:')
    if xh == '':
        print('输入有误,请重新输入')
    elif xh in str([1,2]):
        t1,t2 = rand_time(xh)
        break
    else:
        print('输入有误,请重新输入')
while 1:
    print()
    print('* ' * 8, '1.正序', '* ' * 8)
    print('* ' * 8, '2.倒序', '* ' * 8)
    print('* ' * 8, '3.无尽', '* ' * 8)
    print()
    sel = input('请选择翻书方式:')
    if sel in str([1,2,3]):
        page_num = int(input('请输入书籍总页数:'))
        book(sel,page_num,t1,t2)
    elif sel == '':
        print('输入错误')
    else:
        print('输入错误')

下面开始连接真机,然后启动App,随便打开一本书,最后打开命令行,运行这个Python脚本吧!提醒一下:不要忘了去兑换书币,否则这些努力就白费了。
最后,请广大读者在经济允许的情况下购买正版书籍,支持作者和出版社。

上一篇下一篇

猜你喜欢

热点阅读