monkeyrunner截图限时免费阅读#1

最近有个读书的app搞限时免费阅读, 有几本书我想看, 但是又没有时间, 以前想过更改系统时间来延长阅读时间, 大概是同样有人这么干, 所以现在的限时阅读都是要联网验证一次才能看, 其实这种东西让懂前端的人写几个js就能把人家一整本书的文字全部抠下来永久免费看.

如果说是Android端, 比较好的思路是反编译代码再移除一些判断逻辑, 不过既然我能想到, 别人估计也防御了. 一个笨方法就是一页一页的截图, 不过我要是有这时间, 早就把书看完了.

刚好最近跑了几次monkey, 于是就想让那些自动化测试的工具帮我干这事.

其实说来也简单, 就是模拟我们的操作, 翻一页, 截图, 再翻一页, 截图.

Android SDK自带一个搞黑盒测试的工具–monkeyrunner, 这个和平时说的monkey不大一样, 那个monkey是做压力测试的, 这个则是功能更强大的工具.

流程如下

Created with Raphaël 2.1.0 Start 截A图 翻页 等待1秒 截B图 图A和图B 是否相同 End 保存A图 将图B赋给A图 yes no

比较是为了能区分是否到最后一页了, 等待1秒是为了让app能翻到下一页, 不至于截图的时候还是截的上一页的图.

代码如下:

#Mac OS X, freeder.py
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
import sys, os, time

if (__name__ == '__main__'):
    PNG = "png"
    PF_PNG = ".png"
    PN_WIDTH = "display.width"
    PN_HEIGHT = "display.height"
    DOWN_AND_UP = "down_and_up"
    TARGET_PATH = os.getcwd() + '/freeder' + str(int(round(time.time()*1000))) + '/'
    os.mkdir(TARGET_PATH)
    print 'create dir: ' + TARGET_PATH
    device = MonkeyRunner.waitForConnection()
    print 'device connected'
    touch_x = int(device.getProperty(PN_WIDTH)) - 10
    touch_y = int(device.getProperty(PN_HEIGHT)) / 2

    page = 1
    if (len(sys.argv) == 2):
        page = int(sys.argv[1])

    old_img = device.takeSnapshot()
    while (True):
        device.touch(touch_x, touch_y, DOWN_AND_UP)
        time.sleep(1)
        new_img = device.takeSnapshot()
        if (new_img.sameAs(old_img)):
            print 'snapshot is same, exit'
            break
        else:
            old_img.writeToFile(TARGET_PATH + str(page) + PF_PNG, PNG)
            print 'write image to file, nameing ' + str(page) + '.png'
            old_img = new_img
            page += 1
    print 'done exit'

将手机连上电脑, 开USB调试, 打开读书app, 打开那本书, 终端执行

$ monkeyrunner freeder.py 1

就会开始截图, 文件名从1开始(Windows用户务必将脚本的路径写全, 且生成的图片文件夹在sdk的tools目录下)

这个东西运行起来其实挺费时间的, 我能想到, 大家早就想到了, 所以根本没有藏着掖着的必要, 写个博客给愿意折腾的人去截书玩. 其实看得懂那段代码的人, 能力都不在我之下, 只会比我做的更好, 分享一下纯属兴趣.

不过总有一天, 我们会懒得折腾, 觉得花钱解决问题是最简单的方式.

后续优化monkeyrunner截图限时免费阅读#2:多线程保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值