ubuntu16.04 使用adb连接Android手机及——python实现看小说自动翻页

简介: ubuntu16.04 使用adb连接Android手机及——python实现看小说自动翻页

 adb简介

adb叫做安卓调试桥 (Android Debug Bridge),是一种可以用来操作手机设备或模拟器的命令行工具。它在sdk/platform-tools 目录下。虽然现在 Android Studio 已经将大部分 ADB 命令以图形化的形式实现了,但是了解一下还是有必要的。它是用来管理模拟器或设备,采用C/S模式,主要包括三个部分:

    • A client 客户端Client运行在自己的电脑上,可以通过adb命令 adb start-server启动Client,也可以通过ADT或者DDMS创建Client。
    • A daemon Daemon作为后台程序运行在手机或者模拟器上。
    • server Server最为后台程序运行在自己的电脑上,用来管理Client和Daemon之间的信息交互

    在开发调试Android程序时我们需要通过adb工具在我们的手机和电脑之间建立连接,通常情况我们都是使用数据线,另外还可以使用wifi连接电脑。

    数据线连接

    首先,使用的手机要打开开发者模式,这个问题比较简单(根据需求搜一下就行),不同的手机有不同的打开方式,打开开发者模式后,在里面找到usb调试并启用它,我使用的小米手机,如果想要操作模拟输入input和模拟点击keyevent,还需要打开USB调试(安全设置)。

    安装软件

    sudo apt update
    sudo apt install android-tools-adb android-tools-fastboot

    image.gif

    启动服务

    adb start-server

    image.gif

    重启服务

    sudo service udev restart

    image.gif

    杀死服务

    adb kill-server

    image.gif

    查看连接设备

    adb devices

    image.gif

    如果连接成功,输入adb devices后,会出现下面的内容:

    List of devices attached
    80QBCNP234K3  device

    image.gif

    其中 80QBCNP234K3 是设备序列号,device 是设备状态,设备的状态有三种:

      • offline —— 设备未连接到 adb 或者没有响应
      • device —— 设备已连接到 adb
      • no device —— 未连接模拟器 / 设备

      如果出现以下情况,原因是当前用户组权限不够,需要将当前用户的权限进行修改,加入到plugdev组。

      List of devices attached
      ???????????? no permissions

      image.gif

      也可以通过 lsusb 命令查看接入,系统的 usb 设备都有哪些。

      WIFI连接

      使用wifi连接,需确保电脑和Android设备连接在同一个WIFI网络环境(同一个局域网下,进行通信)。

      查看android设备的IP地址,这里有三种方式查看Android设备IP。

        • 设置-关于手机-状态信息-IP地址中查看
        • 设置-WLAN-点击当前链接上的Wi-Fi查看IP

        例如:设置—〉无线或网络---〉WLAN设置—〉查看当前连接Wi-Fi的IP地址

          • 通过adb命令查看设备IP地址:adb shell  netcfg

          前提:(设备已经和 PC 建立了 usb 连接)

          查到 Android 设备的 IP 后,在 PC 端 ping 一下 IP 地址,如果成功显示,就可以进行下一步。

          image.gif

          执行 adb connect

          知道设备 IP 地址之后,就可以用 adb connect 命令通过 IP 和端口号连接 adb。

          adb connect 192.168.43.5

          image.gif

          如果显示连接成功,则可继续执行后面的操作。如果不成功,可以使用 adb tcpip 模式重启 adb。

          adb tcpip 5555

          image.gif


          image.gif

          image.gif

          adb connect ip 连接成功以后可以执行原来usb连接时的所有命令。

          adb 命令可参考 adb 命令大全:安卓调试工具 adb 命令大全_卫薇的博客-CSDN博客

          程序实例

          下面附加一段模拟书籍手动翻页的代码,看小说就不用自动不动翻页了。该方法仅适用于Android平台。首先要配置好Android SDK环境变量和Python环境,最关键的是可以正常使用adb命令。这一步就不再赘述了,这里简要说明一下模拟翻页的原理,注意看下面一行命令:

          adb shell input swipe 1000 600 200 600

          image.gif

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

            • adb shell:进入设备的Shell命令行;
            • input swipe 1000 600 200 600:模拟屏幕滑动,从x=1000,y=600坐标处滑动到x=200,y=600坐标处。即从右向左滑  屏,也就是翻页的触摸操作;
            • 好了,理解了这行命令后,剩下的事情就好办多了。我们只需要间隔一段时间,循环执行这句话即可。即将下面两行命令放在循环中,循环的次数由书籍的未读页数决定。
            time.sleep(random.uniform(rv_t1,rv_t2))
            run('adb shell input swipe 1000 600 200 600', shell=True)

            image.gif

            为了尽量模拟人类阅读的真实性,这里的时间间隔是给定时间范围内的随机值。

                  最后,为了更方便地使用这个脚本,除了正序(即从右向左滑屏)外,还增加了倒序(即从左向右滑屏)和无尽模式(即正序结束后自动倒序,倒序结束后自动正序,循环往复)。连接上手机,启动APP,直接运行脚本就行,完整的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('输入错误')

            image.gif


            相关实践学习
            AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
            企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
            相关文章
            |
            10月前
            |
            API 数据安全/隐私保护 开发者
            企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
            代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
            |
            10月前
            |
            Android开发 数据安全/隐私保护
            安卓手机修改设备id, 安卓硬改一键新机,手机机型修改(伪装)
            提供了完整的设备信息修改功能,包含设备模板配置、基础信息修改、网络信息修改、模拟器检测绕
            |
            存储 算法 API
            【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
            【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
            3473 82
            |
            10月前
            |
            存储 人工智能 文字识别
            三款安卓手机word编辑器下载,Microsoft Word,wps office,Word手机版,手机word编辑查看阅读器,PDF转换器apk下载
            WPS Office是一款功能强大的办公软件,支持文档编辑、表格处理和演示文稿制作,兼容多种格式并提供丰富的云服务。它具备低内存占用、快速运行的特点,支持跨设备同步与多人协作,内置海量模板及AI辅助功能,如智能写作和PPT自动生成。此外,还可扫描文件、编辑PDF并转换为其他格式,极大提升办公效率,适合手机用户便捷操作。
            1144 1
            |
            10月前
            |
            机器人 测试技术 API
            自动加好友软件手机免费版,无限制qq自动加人软件,python脚本插件分享
            这个示例仅展示了基础的网页自动化测试原理,实际平台都有完善的反自动化机制。建议学习正规
            |
            Web App开发 缓存 JavaScript
            Android网络小说阅读器的实现
            小说阅读Demo,。此Demo使用Jsoup解析HTML,实现小说数据抓取(数据源自网络),并包含自定义View、六章小说缓存等功能,但未实现下载。项目还包括屏幕适配、字体设置等,借助第三方框架完成优化。以下是主页、详情页、阅读页等界面展示。
            381 0
            |
            存储 API 数据安全/隐私保护
            【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
            【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
            2822 6
            |
            Android开发 数据安全/隐私保护 虚拟化
            安卓手机远程连接登录Windows服务器教程
            安卓手机远程连接登录Windows服务器教程
            3852 5
            |
            安全 搜索推荐 Android开发
            Android vs. iOS:解锁智能手机操作系统的奥秘####
            【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
            509 3
            |
            数据采集 存储 XML
            python实战——使用代理IP批量获取手机类电商数据
            本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。

            热门文章

            最新文章

            推荐镜像

            更多