一:minicap简介

minicap属于STF框架的⼀个⼯具,可以⾼速截图、同步⼿机屏幕⾄浏览器等功能,经过试验,截同⼀个屏幕的⼀张图,使⽤adb shell screencap命令进⾏截图速度为2.9秒,⽽minicap仅为0.8秒,效率⾼很多。

import os
import socket
import sys
import time
import struct
from collections import OrderedDictclass Banner:def __init__(self):self.__banner = OrderedDict([('version', 0),('length', 0),('pid', 0),('realWidth', 0),('realHeight', 0),('virtualWidth', 0),('virtualHeight', 0),('orientation', 0),('quirks', 0)])def __setitem__(self, key, value):self.__banner[key] = valuedef __getitem__(self, key):return self.__banner[key]def keys(self):return self.__banner.keys()def __str__(self):return str(self.__banner)class Minicap:def __init__(self, host, port, banner):self.buffer_size = 4096self.host = hostself.port = portself.banner = bannerdef connect(self):try:self.__socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)except (socket.error) as e:# print(e)sys.exit(1)self.__socket.connect((self.host, self.port))def on_image_transfered(self, data):# file_name = str(time.time()) + '.jpg'  # 图片名file_name = '1' + '.jpg'  # 图片名with open(file_name, 'wb') as f:for b in data:f.write((b).to_bytes(1,'big'))def consume(self):readBannerBytes = 0bannerLength = 24readFrameBytes = 0frameBodyLength = 0data = []while True:try:chunk = self.__socket.recv(self.buffer_size)except (socket.error) as e:# print(e)sys.exit(1)cursor = 0buf_len = len(chunk)while cursor < buf_len:if readBannerBytes < bannerLength:map(lambda i, val: self.banner.__setitem__(self.banner.keys()[i], val),[i for i in range(len(self.banner.keys()))], struct.unpack("<2b5ibB", chunk))cursor = buf_lenreadBannerBytes = bannerLength# print(self.banner)elif readFrameBytes < 4:# print(struct.unpack('B', (chunk[cursor]).to_bytes(1,'big')))# frameBodyLength += (struct.unpack('B', chunk[cursor])[0] << (readFrameBytes * 8)) >> 0frameBodyLength += (chunk[cursor] << (readFrameBytes * 8)) >> 0cursor += 1readFrameBytes += 1else:# print("frame length:{0} buf_len:{1} cursor:{2}".format(frameBodyLength, buf_len, cursor))# pic endif buf_len - cursor >= frameBodyLength:data.extend(chunk[cursor:cursor + frameBodyLength])self.on_image_transfered(data)cursor += frameBodyLengthframeBodyLength = readFrameBytes = 0data = []else:data.extend(chunk[cursor:buf_len])frameBodyLength -= buf_len - cursorreadFrameBytes += buf_len - cursorcursor = buf_lenif '__main__' == __name__:# 手动打开调试模式# 推送minicappath = os.popen('adb shell ls /data/local/tmp/minicap').read().strip()print(path)if 'No such file or directory' in path:os.popen('uiautomator2 init')  # 初始化uiautomator2,用于安装 minicap 和 atx-agenttime.sleep(2)os.popen('adb forward tcp:1717 localabstract:minicap')  # 执行了adb端口转发os.popen('adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 1920x720@1920x720/0')  # 启动了minicap服务time.sleep(1)mc = Minicap('localhost', 1717, Banner())mc.connect()mc.consume()

一.第一次运行时,需要初始化uiautomator2用于推送minicap 和 atx-agent到设备。

二.运行时,会在同目录下生成图片

三.

file_name = str(time.time()) + '.jpg' # 图片名,会生成每次界面刷新的图片

file_name = '1' + '.jpg' # 图片名,只保留最后一次刷新的图片

四.

os.popen('adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 1920x720@1920x720/0') # 启动了minicap服务

1920x720是我连接设备屏幕尺寸,这里根据自己连接设备尺寸来修改

Python:minicap实现快速截图相关推荐

  1. 利用 Python + Selenium 自动化快速截图

    Selenium 是一个可以让浏览器自动化地执行任务的工具,常用于自动化测试.与bs4等结合使用,也适合爬取动态网页数据.不过没想到,它居然可以用于网页截图,而且由于可编程性,用法更具想象空间. 目前 ...

  2. 如何利用 Python + Selenium 自动化快速截图

    导读: Selenium 是一个可以让浏览器自动化地执行任务的工具,常用于自动化测试.与bs4等结合使用,也适合爬取动态网页数据.不过没想到,它居然可以用于网页截图,而且由于可编程性,用法更具想象空间 ...

  3. Python 3 怎么快速搭建服务器

    Python 3 怎么快速搭建服务器 python 3 环境,我就不多说了 1.新建一个文件夹 2.放文件夹里一个 index.html 文件用来默认访问,不然会炸的 3.进入文件目录 4.执行以下命 ...

  4. 使用Python和OpenCV进行拍摄截图

    使用Python和OpenCV进行拍摄截图 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何使用OpenCV,Python和PyAutoGui库拍摄截图. 使用pyautogui,可以轻 ...

  5. python使用heapq快速查找最大或最小的 N 个元素

    python使用heapq快速查找最大或最小的 N 个元素 heapq实现了一个适合与Python的列表一起使用的最小堆排序算法. 堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆.( heapq ...

  6. 记录一下:使用 python -m SimpleHTTPServer 快速搭建http服务

    为什么80%的码农都做不了架构师?>>>    在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer. 我们 ...

  7. python新手教程 从零开始-Python零基础从零开始学习Python十分钟快速入门

    原标题:Python零基础从零开始学习Python十分钟快速入门 学习Python的,都知道Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python是一种动态解释型的 ...

  8. python游戏编程书籍-《Python游戏编程快速上手》一1.3 如何使用本书

    本节书摘来异步社区<Python游戏编程快速上手>一书中的第1章,第1.3节,作者: [美]Al Sweigart(斯维加特) 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区& ...

  9. python基础知识资料-Python基础知识快速学习系列视频课程

    Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器C ...

  10. 2021-03-10 Python多线程爬虫快速批量下载图片

    Python多线程爬虫快速批量下载图片 1.完成这个需要导入的模块 urllib,random,queue(队列),threading,time,os,json 第三方模块的安装 键盘win+R,输入 ...

最新文章

  1. Seam的中文化支持
  2. android 比较两个list,比较两个List的内容是否相等
  3. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
  4. 从Github一开源项目ADSEC【学习域渗透攻防基础】
  5. TomCat服务器和Web应用
  6. Google Gson的使用方法及JSON 技术对比
  7. 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结
  8. 租网站服务器安全吗,租用的服务器安全吗
  9. Nginx-rtmp直播之业务流程分析--比较详细
  10. 武汉游记,三件新鲜奇葩事
  11. SQL开头quoted和ansiNULL
  12. 第一款青少年搜索引擎“花漾搜索“APP正式上线
  13. php连接虚拟机中mysql数据库吗,PHP连接MySQL数据库的三种方式
  14. java mysql结果集_Java JDBC结果集的处理
  15. 网络安全实验3 漏洞扫描
  16. htcd816+android密码,详细的HTC Desire 816解锁教程
  17. 韩立刚计算机网络笔记-第01章 计算机网络详解
  18. 最小二乘法 来龙去脉
  19. 阿里云游戏服务器攻击怎么防御?
  20. ROS launch文件标签解释

热门文章

  1. 详解MATLAB/Simulink通信系统建模与仿真源码
  2. GWR学习笔记(一)
  3. 手把手教你使用人人开源
  4. 2-Python程序实例解析
  5. 2018最新Python数据分析实战教程视频 python数据分析班视频 Python数据分析基础教程 利用Python进行数据分析
  6. 铁路售票系统_城轨交通自动售检票(AFC)实训系统中心_地高铁车站票务实训如何建设...
  7. 如何自学生物信息学:从菜鸟到专家
  8. 贪吃蛇c语言作业ppt,c语言贪吃蛇
  9. http://www.myeclipseide.com/ 官网打不开的问题!myeclipse 官网!
  10. 计算机更新bios,升级bios,详细教您主板怎么更新bios