当前位置:首页>python>BookSnap:我用 Python + ADB 写了一个自动截图「整本书」的小工具

BookSnap:我用 Python + ADB 写了一个自动截图「整本书」的小工具

  • 2026-08-20 23:07:30
BookSnap:我用 Python + ADB 写了一个自动截图「整本书」的小工具

摘要:面对微信读书里 17 万字的付费会员书籍,我没有一页页手动截图,而是花了一个下午写了一个 Python 小工具 BookSnap。它通过 ADB 控制安卓设备,自动翻页、截图、去重,最终帮我一次性保存了 754 页高清截图。拿到这些截图后,再喂给大模型做深度分析,一本书就能真正被"读透"。本文记录了我的完整思考、开发过程和关键代码。


一、为什么做这件事?

作为一个经常需要阅读电子书的开发者,我越来越习惯在手机或平板上用阅读 App 看书。但有几个问题一直让我不爽:

    于是我想:能不能让手机/平板自己翻页、自己截图,把整本书"翻拍"成一套高清图片,再经过 OCR 识别交给大模型做深度分析?

    答案是:可以,而且用 Python 就能做。

    二、问题拆解与方案设计

    把整个任务拆成 5 个步骤:

    1. 在电脑上建立与手机的连接 → ADB2. 让手机截图并传回电脑 → adb shell screencap + adb pull3. 让手机翻到下一页 → adb shell input keyevent / swipe4. 循环执行,直到截完 → Python 循环 + 延时控制5. 判断是否截到了最后一页 → 图片相似度去重

    整个流程最核心的技术栈就是:

    三、BookSnap 诞生了

    我给这个工具取名为BookSnap,意思是"像拍照一样把书保存下来"。

    它的使用方式非常简单:

    python booksnap.py devices# 查看已连接设备python booksnap.py capture# 开始自动截图

    运行后会自动生成 page_0001.png、page_0002.png……一直到最后一页,整套流程全自动,无需人工干预。

    四、关键技术点:自动翻页 + 去重

    4.1 两种翻页方式

    不同阅读 App 的翻页手势不同。微信读书支持左右滑动,也支持音量键翻页。因此我设计了两套翻页机制:

    # config.yamladb: page_action: swipe# 可选 key 或 swipe keyevent: KEYCODE_PAGE_DOWN# 按键翻页 swipe: [900, 1000, 100, 1000, 300]# 从右往左滑动

    4.2 图片去重:怎么知道"最后一页到了"?

    这是整个工具最 tricky 的部分。如果到了最后一页,继续翻页,屏幕内容不会变化。如果一直无脑截图,就会生成一堆重复图片。

    我的思路是:把当前截图和上一张截图做相似度对比,如果连续 N 张都几乎一样,就认为已经到最后一页,自动停止。

    核心代码如下:

    def images_are_similar(filepath1, filepath2, threshold=0.95): ”””判断两张图片是否相似(缩略图灰度对比,带容错)””” thumb_size = (128128) pixel_tolerance = 10 img1 = Image.open(filepath1).convert(”L”).resize(thumb_size) img2 = Image.open(filepath2).convert(”L”).resize(thumb_size) pixels1 = list(img1.getdata()) pixels2 = list(img2.getdata()) total = len(pixels1) same = sum(1 for p1, p2 in zip(pixels1, pixels2) if abs(p1 - p2) <= pixel_tolerance) similarity = same / total return similarity >= threshold

    这里有几个细节:

    五、完整代码结构

    项目结构非常简洁,只有 3 个核心文件:

    booksnap/├── booksnap.py# 主程序├── config.yaml# 配置文件└── pyproject.toml# 依赖与项目元信息

    5.1 主程序 booksnap.py

    ”””BookSnap - 通过 ADB 自动翻页截图整本图书”””import subprocessimport sysimport timefrom pathlib import Pathimport clickimport yamlfrom PIL import Imagedef load_config(config_path: str) -> dict: with open(config_path, ”r”, encoding=”utf-8”) as f: return yaml.safe_load(f)def run_adb(*args) -> subprocess.CompletedProcess: ”””执行 adb 命令””” return subprocess.run([”adb”, *args], capture_output=True, text=True)def check_adb() -> None: ”””检查 adb 是否可用””” try: result = subprocess.run([”adb”, ”version”], capture_output=True, text=True) if result.returncode != 0: click.secho(”❌ adb 不可用,请确认已安装 Android SDK Platform Tools”, fg=”red”) sys.exit(1) except FileNotFoundError: click.secho(”❌ 未找到 adb 命令,请安装 Android SDK Platform Tools 并添加到 PATH”, fg=”red”) sys.exit(1)def check_device() -> str: ”””检查是否有设备连接,返回设备 ID””” result = run_adb(”devices”) lines = result.stdout.strip().split(”\n”)[1:] devices = [l.split(”\t”)[0for l in lines if l.strip() and ”\tdevice” in l] if not devices: click.secho(”❌ 未检测到已连接的安卓设备,请通过 USB 连接并开启 USB 调试”, fg=”red”) sys.exit(1) return devices[0]# ... 图片相似度函数 images_are_similar ...@click.group()def cli(): ”””BookSnap - 通过 ADB 自动翻页截图整本图书””” pass@cli.command()def devices(): ”””列出已连接的安卓设备””” check_adb() result = run_adb(”devices”) click.echo(result.stdout) lines = result.stdout.strip().split(”\n”)[1:] devices_list = [l.split(”\t”)[0for l in lines if l.strip() and ”\tdevice” in l] if devices_list: click.secho(f”\n✅ 已就绪,共 {len(devices_list)} 台设备”, fg=”green”) else: click.secho(”\n❌ 未检测到设备”, fg=”red”)@cli.command()@click.option(”--out”, ”-o”, default=”./output”, help=”截图输出目录”)@click.option(”--config”, ”-c”, ”config_path”, default=”config.yaml”, help=”配置文件路径”)@click.option(”--start”, ”-s”, default=1help=”起始页码”)@click.option(”--action”, ”-a”, default=Nonehelp=”翻页方式: key 或 swipe (覆盖配置文件)”)def capture(out, config_path, start, action): ”””开始截图整本图书””” check_adb() check_device() cfg = load_config(config_path) adb_cfg = cfg[”adb”] page_action = action or adb_cfg[”page_action”] keyevent = adb_cfg[”keyevent”] swipe_params = adb_cfg[”swipe”] remote_path = adb_cfg[”remote_path”] page_delay = adb_cfg[”page_delay”] max_pages = adb_cfg[”max_pages”] same_page_stop = adb_cfg[”same_page_stop”] similarity_threshold = adb_cfg.get(”similarity_threshold”, 0.95) out_dir = Path(out) out_dir.mkdir(parents=True, exist_ok=True) click.secho(f”📖 开始截图 ({page_action} 翻页, 最多 {max_pages} 页)”, fg=”cyan”) click.secho(f”📁 输出目录: {out_dir.resolve()}\n”, fg=”cyan”) prev_file = None same_count = 0 success_count = 0 try: for i in range(start, start + max_pages): local_file = out_dir / f”page_{i:04d}.png”# 1. 截图到设备 run_adb(”shell”, ”screencap”, ”-p”, remote_path)# 2. 下载到本地 result = run_adb(”pull”, remote_path, str(local_file)) if result.returncode != 0 or not local_file.exists(): click.secho(f” ⚠ 第 {i} 页截图失败,跳过”, fg=”yellow”) continue# 3. 去重检查 if prev_file is not None and images_are_similar( str(prev_file), str(local_file), threshold=similarity_threshold ): same_count += 1 if same_count >= same_page_stop: click.secho(f”\n🛑 连续 {same_page_stop} 页相似度 > 95%,已到达最后一页,自动停止”, fg=”yellow”) local_file.unlink(missing_ok=True) break else: same_count = 0 prev_file = local_file success_count += 1 file_size = local_file.stat().st_size click.echo(f” ✅ 第 {i} 页 → {local_file.name} ({file_size:,} bytes)”)# 4. 翻页 if page_action == ”key”: run_adb(”shell”, ”input”, ”keyevent”, keyevent) elif page_action == ”swipe”: x1, y1, x2, y2, duration = swipe_params run_adb(”shell”, ”input”, ”swipe”, str(x1), str(y1), str(x2), str(y2), str(duration)) else: click.secho(f”❌ 不支持的翻页方式: {page_action}”, fg=”red”) sys.exit(1) time.sleep(page_delay) except KeyboardInterrupt: click.secho(”\n\n⚠ 用户中断”, fg=”yellow”) finally: run_adb(”shell”, ”rm”, ”-f”, remote_path) click.secho(f”\n🎉 完成! 共截图 {success_count} 页”, fg=”green”)if __name__ == ”__main__”: cli()

    5.2 配置文件 config.yaml

    adb: page_action: swipe keyevent: KEYCODE_PAGE_DOWN swipe: [900, 1000, 100, 1000, 300] remote_path: /sdcard/booksnap_page.png page_delay0.5 max_pages800 same_page_stop3 similarity_threshold0.95

    这些参数基本可以覆盖绝大多数阅读场景:

    • page_delay: 0.5:每页之间留 0.5 秒,等翻页动画完成
    • max_pages: 800:最多截图 800 页,防止失控
    • same_page_stop: 3:连续 3 页相同则自动结束

    六、项目依赖与运行方式

    pyproject.toml 里只依赖了 3 个 Python 包:

    [project]name = ”booksnap”version = ”0.1.0description = ”通过 ADB 控制安卓设备,自动翻页截图整本图书”requires-python = ”>=3.11dependencies = [ ”click>=8.0”, ”pyyaml>=6.0”, ”pillow>=10.0”,][project.scripts]booksnap = ”booksnap:cli”

    运行前准备:

      uv sync# 或 pip install -e .python booksnap.py capture

      七、最终成果:754 页高清截图

      我用 BookSnap 对一本微信读书上的书籍进行了完整截图。运行日志显示最终成功保存了754 张图片,从封面到最后一页一页不落。

      打开截图检查一下:

      • 第一张是封面和书籍信息页,清晰度良好
      • 中间页包含文字、图表、结构图,内容完整
      • 文件名按 page_0001.png 到 page_0754.png 顺序排列,方便后续整理成 PDF 或做 OCR

      这意味着一本 17 万字的书,可以在十几分钟甚至更短的时间内被完整"数字化"成图片集。之后可以:

      • 用 OCR 工具(如 PaddleOCR、Tesseract)提取文字
      • 用 ImageMagick 或 Python 脚本合并为 PDF
      • 用笔记工具做批注、摘录和知识管理

      对我来说最激动人心的就是这条链路:BookSnap 把书"拿出来" → OCR 转成文本 → 交给大模型深度分析。一本书不再是单向输入,而是变成了可以和 AI 对话、深度交互的知识资产。

      八、踩坑与优化

      在开发过程中,我遇到了几个典型问题:

      九、未来可以改进的方向

      BookSnap 现在已经能很好地完成"截图整本书"的任务,但还有一些值得继续打磨的地方:

        十、写在最后

        有时候我们会遇到这样的问题:某些内容被锁在 App 里,无法自由使用。技术人的本能不是去抱怨,而是想:"我能不能自己写一个工具来解决?"

        BookSnap 就是一次这样的尝试。它没有复杂的架构,也没有高大上的算法,只是用 Python 把 ADB 的命令串起来,加上一个去重判断,就解决了一个实际痛点。

        最终,它帮我节省了数小时的重复劳动,也让我重新思考:很多看起来"只能手动做"的事,其实都可以自动化。

        如果你也有类似需求,不妨试试这个项目。代码很短,思路很清晰,改一改参数就能用。


        项目关键词:Python、ADB、自动化、截图、电子书、微信读书、OCR

        适用场景:电子书归档、阅读笔记整理、纸质书数字化参考、批量页面采集研究

        免责声明:本工具仅用于个人学习和资料整理,请尊重版权,不要将自动化截图用于非法传播或商业用途。

        最新文章

        随机文章

        基本 文件 流程 错误 SQL 调试
        1. 请求信息 : 2026-08-22 01:20:52 HTTP/2.0 GET : https://f.mffb.com.cn/a/504291.html
        2. 运行时间 : 0.285206s [ 吞吐率:3.51req/s ] 内存消耗:4,635.59kb 文件加载:140
        3. 缓存信息 : 0 reads,0 writes
        4. 会话信息 : SESSION_ID=aedef4aea34fbc3a1831137d67746e74
        1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
        2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
        3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
        4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
        5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
        6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
        7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
        8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
        9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
        10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
        11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
        12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
        13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
        14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
        15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
        16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
        17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
        18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
        19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
        20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
        21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
        22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
        23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
        24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
        25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
        26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
        27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
        28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
        29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
        30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
        31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
        32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
        33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
        34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
        35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
        36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
        37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
        38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
        39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
        40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
        41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
        42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
        43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
        44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
        45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
        46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
        47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
        48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
        49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
        50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
        51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
        52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
        53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
        54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
        55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
        56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
        57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
        58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
        59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
        60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
        61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
        62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
        63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
        64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
        65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
        66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
        67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
        68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
        69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
        70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
        71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
        72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
        73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
        74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
        75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
        76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
        77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
        78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
        79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
        80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
        81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
        82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
        83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
        84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
        85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
        86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
        87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
        88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
        89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
        90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
        91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
        92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
        93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
        94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
        95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
        96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
        97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
        98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
        99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
        100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
        101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
        102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
        103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
        104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
        105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
        106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
        107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
        108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
        109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
        110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
        111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
        112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
        113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
        114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
        115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
        116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
        117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
        118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
        119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
        120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
        121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
        122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
        123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
        124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
        125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
        126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
        127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
        128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
        129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
        130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
        131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
        132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
        133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
        134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
        135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
        136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
        137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
        138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
        139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
        140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
        1. CONNECT:[ UseTime:0.000962s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
        2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001458s ]
        3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.040032s ]
        4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.010323s ]
        5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001429s ]
        6. SELECT * FROM `set` [ RunTime:0.003477s ]
        7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001458s ]
        8. SELECT * FROM `article` WHERE `id` = 504291 LIMIT 1 [ RunTime:0.001127s ]
        9. UPDATE `article` SET `lasttime` = 1787332852 WHERE `id` = 504291 [ RunTime:0.002220s ]
        10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000611s ]
        11. SELECT * FROM `article` WHERE `id` < 504291 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001123s ]
        12. SELECT * FROM `article` WHERE `id` > 504291 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001149s ]
        13. SELECT * FROM `article` WHERE `id` < 504291 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007954s ]
        14. SELECT * FROM `article` WHERE `id` < 504291 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.048021s ]
        15. SELECT * FROM `article` WHERE `id` < 504291 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005382s ]
        0.288766s