zoukankan      html  css  js  c++  java
  • 打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脚本吧!提醒一下:不要忘了去兑换书币,否则这些努力就白费了。

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

  • 相关阅读:
    list(range(10))解释
    numpy.random.normal函数
    适用于Python扩展程序包的非官方Windows二进制文件
    Linux--vi/vim编辑器常用命令
    Centos Mirrors List (centos7)
    windows--redis安装
    Celery 3.x 升级至 celery 4.x(转)
    windows/linux(centos7)安装SVN
    远程获取--snmp模块(python)/snmp-cmds,easysnmp
    FileZilla客户端(OS)连接Linux
  • 原文地址:https://www.cnblogs.com/wenhanxiao/p/11752785.html
Copyright © 2011-2022 走看看