-
2020-12-10 12:44:20
批量截图任务
作为一个软件工程师,不只是做好自己的本职工作(iOS),而是需要解决项目中的技术问题。这次就是解决自动截图的问题
早期公司的数据工程师利用 phantomjs 来截图,后期不断发现截图效率低,加之开发者团队不再维护,因此决定将截图这部分跟你剥离开来,以后方便开发维护。我就承担了这个工作
puppeteer
Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the DevTools Protocol. Puppeteer runs headless by default, but can be configured to run full (non-headless) Chrome or Chromium.
安装问题
一开始按照往常的套路(npm install --save puppeteer) 好几次都卡住了,后期查找资料发现切换到国内的镜像就可以顺利下载
PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org npm i --save puppeteer
To use Puppeteer in your project, run:
PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org npm i --save puppeteer
Install some basic packages
npm install
Usage
const puppeteer = require('puppeteer'),
fs = require('fs'),
path = require('path'),
request = require('request')
function mkdirsSync(dirname) {
if (fs.existsSync(dirname)) {
return true
} else {
if (mkdirsSync(path.dirname(dirname))) {
fs.mkdirSync(dirname)
return true
}
}
}
var snapShotFolerPath = path.join(__dirname, '../snspshot/')
mkdirsSync(snapShotFolerPath)
function snapShot (taskInfo) {
return new Promise(function (resolve, reject) {
(async function(){
// 启动Chromium
const browser = await puppeteer.launch({ignoreHTTPSErrors: true, headless:true, args: ['--no-sandbox']})
// 打开新页面
const page = await browser.newPage()
// 设置页面分辨率
await page.setViewport({width: 1920, height: 1080})
// 访问
await page.goto(taskInfo.websiteUrl, {waitUntil: 'domcontentloaded'}).catch(err => console.log(err))
await page.waitFor(1000)
try {
// 截图
await page.screenshot({path: snapShotFolerPath + taskInfo.imageName, fullPage:true}).catch(err => {
console.log('截图失败: ' + err)
});
await page.waitFor(6000)
} catch (e) {
console.log('failed ' + e)
} finally {
await browser.close()
fs.stat(snapShotFolerPath + taskInfo.imageName, function(err,stats){
if (err) {
reject('fail')
} else {
if (stats.isFile()) {
resolve('success')
}
}
})
}
})()
})
}
module.exports = snapShot
如何安装 (Linux 、Unix 操作系统)
如果你有翻墙环境
执行 npm install
执行 npm start
如果你没有翻墙环境
打开 package.json 文件,检查 dependencies 项目,如果 key 为 puppeteer 的条目,先删除该条目。
进入工程命令行,输入 PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.co... npm i --save puppeteer
执行 npm install 命令
执行 npm start
流程说明
while 循环去调用接口去获取当前的截图任务
在有截图任务情况下继续截图
没有截任务的情况下,为了避免浪费资源,程序休眠10分钟后继续下一次的获取截图任务
如果遇到调用截图任务接口500错误,则强制停止截图任务,相应的服务端工程师去查询失败原因
如果有截图任务那么就去截图
截图后将截图图片保存到文件夹,命令为当前日期 yyyy-MM-dd-hh-mm-ss-S 格式。然后将结果上传到服务端
截图失败将当前任务结果保存到本地 failedTasks.json 文件夹一份,然后上传到服务端
截图成功不管失败还是成功都去通知服务端。如果失败将当前任务告诉服务端,如果成功将当前任务信息和截图成功的绝对路径告诉服务端
一些说明
Demo 中执行 npm start 真正执行的是 quickStart.js 中的代码。完整的“获取截图任务、截图、截图上传到OSS、失败则将失败任务上传到服务”逻辑在 index.js 文件中
工程是在没有提供真正的接口获取任务,而是采用随机数获取截图任务
截图成功后将结果上传到OSS这一个步骤是没有的,采用 log 出来
失败的上传也是不存在的,log 打印而已
todoList
多线程高效率的去截图
一些写法暂时比较粗糙,不优雅,待改进
puppeteer 很强大,大家可以去研究下
更多相关内容 -
Arcgis批量截图代码.zip
2020-08-18 15:30:29保存好工程文件,不能有汉字,打开arcgis的驱动页面,启动驱动液面设置好要截图图层,命名字段,截图的范围,打开arcgis的PYTHON运行页面,复制下面的代码进去,替换掉红色部分,第一个是你保存的mxd工程文件的位置... -
批量截图及自动执行工具 .zip
2020-06-28 11:04:47这两个工具组合,可以通过自动化手段,使加密电子书批量逐页自动截图下来,然后再把图片转换成PDF文件 实现多平台使用。详见本人博客:https://blog.csdn.net/jaysur/article/details/106993174 -
视频批量截图软件
2018-04-17 17:01:19支持对多个视频文件进行批量截图,同时支持自定义每个视频生成多少张截图,文件截取多个支持从文件夹以及列表文件内读取, -
基于C#开发的CATIA批量截图工具
2019-02-20 18:49:45基于C#进行的CATIA二次开发,可用于CATIA批量截图。适用于学习基于Automation进行CATIA二次开发的朋友 -
网页批量截图工具
2013-12-15 18:07:31支持网页批量截屏,只需将连接放置工具,就可实现批量截图功能 -
快递批量查询截图工具(python)
2020-05-19 18:24:57python原创制作,运行后将获取以下文件: 1.物流地图截图 2.物流节点截图 3.运单详情截图 4.电子存根截图 5.寄件收件地址表格 -
视频批量截图
2018-04-16 11:50:31视频批量截图视频批量截图视频批量截图视频批量截图视频批量截图 -
批量截图工具
2022-01-25 21:33:50opencv+python 批量截图工具截图工具作用
依次显示一个文件夹中所有的jpg和png文件,通过鼠标选择位置,从每张图中截图得到固定宽度和固定高度的小图,并将小图重命名保存在原图的相同目录。每张大图可以截取多次,可以撤销之前的选择框,使用方法如下:
使用步骤
- 修改CutTool.py (后文)中第六行path变量,修改为包含所有未切分的原图的文件夹
- 修改第八行和第九行的width和height为切出来的相片的长和宽
- 运行CutTool.py
- 程序展示图片,使用鼠标在图片上左键单击选中Box的左上角
- 鼠标单击后按键盘i,显示Box
- 如果Box满意可以按回车键自动切分并保存Box内的内容到path文件中(文件名为原文件名+boxed),如果Box不满意可以按u删除本次选择操作
- 按空格键可以结束该图片,进入下一个图片的编辑
总结
空格-结束这张图进入下一张
左键-确定一个截图的起点
i-展示这张图最近确定的框选
u-清除目前图的所有框选
enter-确定这张图的最近一次框选,截图并保存【注:一张图可以截取不限数量的小图,截取之后的图片保存在和原图相同的路径并且在文件名结尾处加上了boxed标记和序号】
源码
# coding: utf-8 import cv2 import os import copy # The folder that contain all the pictures path = '你的文件地址' # box size width = 50 height = 100 #inner param global gx global gy gx = 0 gy = 0 def clickListner(event,x,y,flags,param): global gx global gy if event == 1: print('clicked',x,',',y) gx,gy = x,y #get all the files allFiles = os.listdir(path) allValid = [] for file in allFiles: if file[-4:]=='.jpg' or file[-4:]=='.png': allValid.append(file) # i:105 space:32 enter:13 u:117 for file in allValid: file = os.path.join(path,file) img = cv2.imread(file,cv2.IMREAD_GRAYSCALE) imgcopy = copy.deepcopy(img) cnt = 0 while(True): cv2.namedWindow('current') cv2.imshow('current',imgcopy) cv2.setMouseCallback("current",clickListner) key = cv2.waitKey(0) print(key) if(key==13): # enter outputimg = img[gy:gy+width,gx:gx+width] cv2.imwrite(file[:-4]+'_boxed'+str(cnt)+'.jpg',outputimg) cnt += 1 outputimg = None gx,gy = 0,0 imgcopy = copy.deepcopy(img) if(key == 105): # draw box cv2.rectangle(imgcopy,(gx,gy),(gx+width,gy+width),255,2) if(key == 32): # skip break if(key == 117): #undo gx,gy = 0,0 imgcopy = copy.deepcopy(img) cv2.destroyAllWindows()
-
基于python-yolo的批量截图
2021-01-20 02:54:26本人介于做python潮水识别期间(已完成潮水...上述第两张图由test开始,到tt=tt+1为实现截图的代码,代码复制如下: test=thickness box=(left+test,top+test,right-test,bottom-test) region=image.crop(box) r -
命令行批量截图Node脚本示例代码
2020-10-17 12:04:37主要给大家介绍了关于命令行批量截图Node脚本的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 -
DayDreamInGIS数据处理工具 V1.1.3_beta 新功能之 图斑批量截图 ArcGIS 批量截图 批量出图
2021-02-24 21:29:58实现功能:将图层中的所有图斑批量截图并存储。 参数说明: DPI 出图分辨率,分辨率越高,图片越清晰,速度越慢 缩放倍数:截图后当前图斑的缩放大小。截图时,以当前图斑的Extent为基础,进行Expand扩展。截图...工具界面如下:
实现功能:将图层中的所有图斑批量截图并存储。
参数说明:
DPI 出图分辨率,分辨率越高,图片越清晰,速度越慢
缩放倍数:截图后当前图斑的缩放大小。截图时,以当前图斑的Extent为基础,进行Expand扩展。截图视图大小不合适,请调整该参数。
当前工具出图时,设置为只显示当前图斑,其他图斑隐藏。
该工具为测试版,具体功能待进一步优化
下载请参考如下帖子
https://blog.csdn.net/u012839776/article/details/105910588?spm=1001.2014.3001.5501
-
易更易编程工具2020_批量_易更易编程工具_批量升级_批量截图_精易编程助手_
2021-10-01 04:02:07跟精易助手相对 更齐全 智能 生成代码 POST 可直接复制源码JSON 强解 再次升级 可直接复制源码 图片合成+批量水印声音生成置入转换窗口信息 找句柄 可直接复制源码外部进程打补丁监视内存+文件文件版权三维窗口三维... -
Arcgis如何按小班图斑进行自动批量截图
2022-04-26 16:05:29在日常调查工作中,常常需要进行影像截图举证,若是图斑数量比较多,一个个截图将浪费大量的人力物力。利用Arcgis,可以针对小班矢量数据库,对每一个图斑进行自动截图,并按照自行编写的字段,对截图文件进行命名。...在绿化造林空间评估、国土三调调查、执法检查等日常调查工作中,常常需要进行影像截图举证,若是图斑数量比较多,一个个截图将浪费大量的人力物力。利用Arcgis,可以针对小班矢量数据库,对每一个图斑进行自动截图,并按照自行编写的字段,对截图文件进行命名。
代码如下,相关咨询可联系Q: 107873130
m={}
for nrow in range(1,sheet2.nrows):
val2=sheet2.row_values(nrow)
key=val2[1]
if m.has_key(key):
m[key].append(list(val2))
else:
m[key]=[list(val2)]
for key in m:
for i in range(len(m[key])):
for j in range(len(m[key][i])):
if m[key][i][j]=="":
m[key][i][j]=" "
elif m[key][i][j]==0:
m[key][i][j]=" "for nrow in range(1,sheet1.nrows):
start=time.time()
print nrow
val = sheet1.row_values(nrow)
d=dict(zip(head,val))
L=[]
for l in range(len(val)):
if val[l]!="":
b="B"+str(l)
locals()[b] = val[l] -
批量截图
2018-05-05 21:06:07clcclearclose allpic = imread('E:\裂纹\a\2\43.bmp');for i = 1:5 close all imshow(pic); [x,y] = ginput(1) %确定图像上的两点利用ginput函数,返回值是两点的坐标 pic_1 = imcrop(pic,[x,y,24,24]);... -
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2020-10-16 14:48:31主要介绍了Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能,结合实例形式分析了IECapt的下载、安装及截图、生成缩略图相关使用技巧,需要的朋友可以参考下 -
CAD图纸批量截图软件AcmeCADConverter2017v8.8.7正版安装包+注册码生成器(好用)
2019-03-21 18:27:26自己收藏的!!!CAD图纸批量截图软件AcmeCADConverter2017v8.8.7正版安装包+注册码生成器(好用) -
凌霄批量截图 破解版
2013-03-05 14:23:52凌霄批量切割图片为将图片分割成任意多小片提供了一个完整的的解决方案。 1、任意指定要切割的行数及列数。 2、任意指定任意行的高度或列的宽度。 3、通过预览窗口实时看到分割效果 4、支持单张保存... -
unity 模型批量截图的方法
2020-11-24 18:32:48事先把模型打包成ab包,然后加载包内的模型进行截图 using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; public class jietu : MonoBehaviour { // Start is ... -
将不可复制、不可打印的电子书批量截图生成PDF
2020-06-28 11:03:19首先感谢作者mainIdear的博文《当当·亚马逊·京东等加密的电子书转为PDF》为我搞定加密电子书转PDF提供帮助。 我准备搞的电子书就是下图这个,文字不能复制,也无法...以上截图工具和按键精灵打包下载地址:直达CSDN -
基于labview的自动批量截图及图片合成PDF软件
2019-04-02 21:03:23本软件可以自动截图,如所有可预览的文库文件,打开软件,然后选择截图去,总页数,延时时间,,将鼠标放在下一页上,即可自动定时模拟人点击,并截图,最后合成PDF,实现文档下载。 电脑需安装labview驱动,或者... -
智者视频批量自动截图软件 v0412免费版.zip
2019-07-15 08:14:35智者视频批量自动截图软件一款批量自动对视频进行截图的软件,支持按照秒数和按照个数方式截图。 智者视频批量自动截图软件截图 -
Win系统下快速批量截图
2018-06-15 10:55:46关于快速批量截图,其实有很多方法。这里我为大家介绍一个冷门但方便快捷的方法。不用下软件。windows操作系统下的psr.exe 软件。单击开始,用“搜索”搜索出“psr.exe”或windows键+r在“运行”中输入“psr.exe”。... -
google earth屏幕批量截图工具
2013-11-12 15:47:561、首先GE5.0左边侧栏应与getscreen的侧栏一样宽或小于 2、GE5.0->工具->选项->3D视图->图形模式->选择DirectX 和 使用安全模式 3、关闭地形即OK! -
Node.js-命令行批量截图Node脚本
2019-08-10 03:05:21命令行批量截图Node脚本 -
Flash批量截图精灵程序+源码
2009-05-12 16:13:41本工具能够对Flash文件进行批量截图,选择目标文件夹将自动索引目标文件夹里所有的.swf格式文件,单击【开始】后将批量生成Flash缩略图。程序将在目标目录下自动创建一个images文件夹,并将缩略图保存至改文件夹。 ... -
Arcgis按图斑批量出图(按卫片图斑批量出图)
2018-04-19 12:37:38批量出图工具,用于卫片批量出图,一个图斑一个jpg,方便操作查看,主要用到的就是数据驱动工具,Arcgis版本10以上,版本太低,没有这个工具不行的 -
arcgis根据矢量图斑截图工具1.02.rar
2019-12-16 11:28:40以往的截图是根据一个图斑自己框选,但是矢量图斑量大的情况,此项工作就非常繁琐,此工具正是根据这一痛点,采用批量根据矢量数据进行影像对接缩放进行截图,简单快捷