selenium自动化学习--截取长图的方法

用gm实现基于node.js的selenium自动化截取长图的问题

  • 解决思路
  • 具体代码
  • 效果
  • 总结

解决思路

主要运用gm方法对截图的拼接:

  1. 先运动webdriver.takeScreenshot()和scroll的操作分别截取出我们需要的截图。

  2. gm().把所有的截图拼接在一起(需要安装gm:GraphicsMagick链接)

  3. 删除没用的临时的截图

具体代码

const gm = require('gm');
exports.screenLongShot = async function (driver, path) {// 图片存入的路径let targetPath = path.split("/");let dirPath = path.substring(0, path.indexOf(targetPath[targetPath.length - 1]));// 全文的高度let totalHeight = await driver.executeScript("return document.body.scrollHeight");// 获取浏览器页面的高度,判断需要向下scroll几次let hh = await driver.manage().window().getRect();let height = hh['height']let count = height;let i = 1while (height<totalHeight){if (mkdirsSync(dirPath) === true) {// 截图await driver.takeScreenshot().then(function (image) {console.log(image)// 先暂时存起来fs.writeFile(dirPath + 'tmp' + i + '.jpeg', image, 'base64', function (err) {if (err !== null) {console.log(err);}});})}i++;// 向下scroll 一个窗口的高度await driver.executeScript("window.scrollBy(0,"+height+")");height += count;}// 读文件 获取刚才截的几张图let tmpImg = await fs.readdirSync(dirPath)let finImg = []for(let key of tmpImg){console.log(key)if (key.search('tmp') !== -1){finImg.push(key)}}// 先把第一个图片当作最上面的图,之后在这个图片上拼接,之后删除掉临时的图片await gm(dirPath+finImg[0]).write(path, function(err){fs.unlinkSync(dirPath+finImg[0]);if(err != null){console.log(err);}});await wait(driver, 2000);// 拼接之后删除for(let i = 1; i<  finImg.length;i++){await wait(driver, 2000);await gm(path).append(dirPath+finImg[i]).write(path, function(err){fs.unlinkSync(dirPath+finImg[i]);if(err != null){console.log(err);}});}
};

效果

在这里插入图片描述

总结

方法有点垃圾,就是把多个图拼接在一起,但是由于没找到好的方法,所以能勉强实现截图的目的。如果有更好的方法,欢迎分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381294.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

西安城市标识牌的缺陷

西安这座古城&#xff0c;是西北地区政治经济文化中心&#xff0c;西北各个行业的龙头企业也多立足于西安。就标识牌制作来说&#xff0c;西安的标识牌行业在西北地区也首屈一指。不过从专业的眼光观察西安城市标识牌的实际状况&#xff0c;还是有诸多缺陷&#xff0c;其中以下…

标签打印软件如何制作三角形合格证

产品合格证标签是产品生产出售过程中的一个重要的标牌&#xff0c;产品合格证的外观有很多种&#xff0c;方形合格证&#xff0c;圆形合格证&#xff0c;三角形合格证&#xff0c;那么这些各种各样的合格证标签是怎么制作出来的呢&#xff1f;下面以三角形合格证为例教大家如何…

校园一键报警柱的作用

校园一键报警柱是一种用于校园安全的紧急报警系统&#xff0c;可以随时随地向校园安全管理部门发送紧急警报。这种系统通常采用带有紧急按钮的电缆或无线警报装置&#xff0c;使学生、教师和工作人员可以在出现紧急情况时轻松报告安全问题&#xff0c;迅速地通知校园安全人员&a…

基于51单片机的太阳能交通警示牌

设计简介&#xff1a; 本设计是基于单片机的太阳能交通警示牌&#xff0c;主要实现以下功能&#xff1a; LCD1602显示光照度以及锂电池电压值实时检测环境光照度亮度小于一定值点阵显示“出入平安”锂电池可通过太阳能进行充电 标签&#xff1a;51单片机、LCD1602、充电模块…

怎样用条码软件制作各种各样的警示标牌

自从人类进入有电的生活以来&#xff0c;给我们的生活带来了巨大的帮助&#xff0c;但是电是一把双刃剑&#xff0c;它也是很危险的&#xff0c;好多电设备的上面都会有警示标牌&#xff0c;提醒人们要小心。这些标签上的数据有些是固定的有些是变量的&#xff0c;这就要用到条…

基于STM32智能三角警示牌设计

一、任务简述 本次研究采用这种设计的研究用途是为了减少交通事故发生的可能性&#xff0c;确保人员安全&#xff0c;节省人为防置的时间。该智能三角警示牌稳定性很高&#xff0c;通过遥控到达指定位置后可以远程遥控展开和收回&#xff0c;人员无需离车辆即可远程控制智能三…

制作一款简易的可燃气体报警器,你来吗?

你听说过因为燃气泄漏而导致的火灾&#xff0c;中毒严重中的还会引起爆炸等灾难吗&#xff1f;是不是很恐怖&#xff1f;主要原因就是可燃气体泄漏后没有及时发现达到一定的浓度时&#xff0c;遇到明火或者电火花造成的。市面上也有卖很多种可燃气体报警器的。因为有了它能有效…

java led警示牌,一种新型LED三角警示牌的制作方法

本实用新型涉及一种新型LED三角警示牌&#xff0c;属于交通警示设备技术领域。 背景技术&#xff1a; 三角警示牌&#xff0c;又称三角警告牌&#xff0c;驾驶员在路上遇到突发故障停车检修或者是发生意外事故的时候&#xff0c;利用三角警示牌可以提醒其它车辆注意避让&#x…

我的世界java怎么写彩字_我的世界告示牌怎么打彩字 告示牌制作图文教程

我的地盘我做主&#xff01;在《我的世界》中很多玩家都喜欢在自己心爱的建筑门前插一块告示牌&#xff0c;来宣示自己主权&#xff0c;超好玩小编之前也在其他小伙伴的建筑里见过很多告示牌&#xff0c;而且有些小伙伴的告示牌上的字体还是不同颜色的&#xff0c;究竟怎么样才…

Python——程序设计:商贷月供计算器

设计一个简单的购房商贷月供计算器类&#xff0c;按照以下公式计算总利息和每月还款金额&#xff1a; 总利息贷款金额*利率 每月还款金额 &#xff08;贷款金额总利息&#xff09;/贷款年限 贷款年限不同利率也不同&#xff0c;这里规定只有如表8-2所示的3种年限、利率。 年限…

选读SQL经典实例笔记23_读后总结与感想兼导读

1. 基本信息 SQL经典实例 SQL Cookbook [美]安东尼莫利纳罗&#xff08;Anthony Molinaro&#xff09; / 人民邮电出版社 / 2018-07 / 其他 人民邮电出版社,2018年7月出版第1版&#xff0c;2021年12月出版第2版 1.1. 读薄率 1版书籍总字数827千字&#xff0c;笔记总字数30…

【Opencv入门到项目实战】(十):项目实战|文档扫描|OCR识别

所有订阅专栏的同学可以私信博主获取源码文件 文章目录 1.引言1.1 什么是光学字符识别 (OCR)1.2 应用领域 2.项目背景介绍3.边缘检测3.1 原始图像读取3.2 预处理3.3 结果展示 3.轮廓检测4.透视变换5.OCR识别5.1 tesseract安装5.2 字符识别 1.引言 今天我们来看一个OCR相关的文…

Python3爬取东方财富十大股东及题材/同花顺参股控股公司及题材

爬取东方财富十大股东及题材/同花顺、参股控股公司及题材 东方财富网同花顺 Python后台抓取&#xff0c;C#客户端展示 待抓取网站及数据内容如下 &#xff1a; 东方财富网 http://emweb.securities.eastmoney.com/CoreConception/Index?typeweb&codesh601390 下的核心题…

《Kubernetes知识篇:常见面试题汇总》

正在不断地完善中&#xff0c;预计1个月的时间完成&#xff0c;覆盖整个Kubernetes知识面总结&#xff01; 一、概述 1、简述什么是 Kubernetes&#xff1f; kubernetes&#xff08;常简称k8s&#xff09;&#xff0c;是一个 为容器化应用提供自动化部署、扩展和管理的开源平台…

Python实现调用百度翻译的API

import requests import hashlib import random import jsondef translate(text, from_lang, to_lang):app_id XXXXX # 替换为你的App IDsecret_key XXXXX # 替换为你的Secret Key# 生成随机数salt random.randint(32768, 65536)# 计算签名sign app_id text str(salt) …

机器学习的相关软件框架下载安装

文章目录 一、Anaconda1. Anaconda 的下载2. Anaconda 的安装3. Anaconda Navigator 打不开问题&#xff08;不适用所有&#xff09; 二、PyTorch-CPU1. PyTorch 环境创建2. PyTorch 下载3. Jupyter 中使用 PyTorch 三、Python 版本升级与包的维护1. 更新 Anaconda2. 查看与更新…

在线学习功能

一、需求描述 学生登录进入学习中心即可在线学习&#xff1a; 1、学生可以在windows浏览器上在线观看视频&#xff08;录播课程&#xff09;。 2、播放器具有快进、快退、暂停等基本功能。 3、学生可以方便切换章节进行学习。 什么是录播课程&#xff1f; 录播课程就是提供录制…

Vue组件库

Vue组件库 ViteVue3TypescriptTSX 1、项目搭建 1.1、创建项目&#xff08;yarn&#xff09; D:\WebstromProject>yarn create vite yarn create v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh pa…

计算机网络:网络字节序

目录 一、字节序1.字节序概念2.字节序的理解&#xff08;1&#xff09;大端模式存储数据&#xff08;2&#xff09;小端模式存储数据 二、网络字节序 一、字节序 1.字节序概念 字节序&#xff1a;内存中存储多字节数据的顺序。 难道存储数据还要看顺序吗&#xff1f; yes。内…

Gartner数据库魔力象限2022:阿里领先、腾讯再次进入、华为退出

上周&#xff0c;Gartner正式发布了2022年数据库魔力象限&#xff0c;先睹为快&#xff1a; &#xff08;图片来源&#xff1a;链接参考在文末参考&#xff09; 1. 关于Gartner的数据库魔力象限 Gartner数据库魔力象限&#xff08;参考&#xff0c;后面简称MQ&#xff09;一直…