Python 实现网页自动截图的示例讲解


Posted in Python onMay 17, 2018

背景介绍

最近在为部门编写一个自动化测试工具,工具涉及到一个功能,即 将自动化测试生成的html报告截图,作为邮件正文,html文件上传到web服务器以链接形式添加到邮件中,最后发送邮件。

任务难点

之前从未接触过页面自动截图相关的方面,因此如何自动进行页面截图成为本地调研方向。

方案思考

在刚接到这个任务时,并不认同目前的方案。曾经一度认为,将html报告的内容写入邮件正文,即可通过html的形式发送邮件了。经过尝试后发现,邮件不支持带javascript的html。因此,选择了预览html并自动截图的方案。

编程语言

python 2.7

使用方案 :

selenium + phantomjs

方案介绍

实现自动预览html并截图有以下几个步骤:

1. 浏览器打开html

2. 对浏览器页面进行截图

3. 将截图保存到指定位置

最初,笔者使用了这个实现方案:

(1).使用webbrowser 库打开默认浏览器,显示url

Python 实现网页自动截图的示例讲解

(2).使用PIL.ImageGrab库的对屏幕进行进行截图

Python 实现网页自动截图的示例讲解

到此为止,笔者已经获得html的预览截图,一切似乎很顺利,但接下来

发现了以下几个问题:

(1).打开默认浏览器时,默认浏览器是什么,浏览器处于什么状态都不知晓。

(2).浏览器显示html,会有一个显示的打开浏览器,浏览器打开html的动作出现,如果用户此时产生了其他动作,必定会对之后的截图产生影响。

(3).屏幕截图,将整个屏幕都进行截图,截图中除了html页面正文,同时也包含了浏览器等当前屏幕包含的所有元素,暴漏了用户隐私。

(4).如果页面较大,页面会产生上下翻页的效果,屏幕截图无法应对此种页面,截图看到的报告只有一部分。

基于上述问题,笔者放弃了这个看起来简单有效的方案。从而

对方案挖掘了一些深层需求:

(1).打开浏览器必须隐式调用,用户无法看到工具在做什么,从而不会通过误操作对工具产生影响。

(2).截图必须针对浏览器页面正文 ,保证无其他冗余信息,且截到页面全图根据这些需求,笔者经过一系列尝试终于发现了selenium + phantomjs。

python selenium : 是python对浏览器自动化测试框架selenium的扩展,selenium库支持了selenium所包含大部分功能。

phantomjs : 是一个无界面的,可脚本编程的webkit浏览器,python selenium同样提供对phantomjs的支持。

接下来一切就很容易了:

(1).安装python selenium 库,推荐使用pip快速安装最新版本

(2).下载phantomjs.exe,将其添加到环境变量 path 中 。方便起见可以直接放在python的安装目录根目录下

(3).编写测试代码

Python 实现网页自动截图的示例讲解

简单讲解一下代码:

fromselenium importwebdriver     #从selenium库导入webdirver

brower=webdriver.PhantomJS()    #使用webdirver.PhantomJS()方法新建一个phantomjs的对象,这里会使用到phantomjs.exe,环境变量path中找不到phantomjs.exe,则会报错

brower.get(url)           #使用get()方法,打开指定页面。注意这里是phantomjs是无界面的,所以不会有任何页面显示

brower.maximize_window()      #设置phantomjs浏览器全屏显示

brower.save_screenshot(picName)   #使用save_screenshot将浏览器正文部分截图,即使正文本分无法一页显示完全,save_screenshot也可以完全截图

brower.close()           #关闭phantomjs浏览器,不要忽略了这一步,否则你会在任务浏览器中发现许多phantomjs进程

执行了上述代码后,我们看一下截图效果吧:

Python 实现网页自动截图的示例讲解

以上这篇Python 实现网页自动截图的示例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中计算三角函数之cos()方法的使用简介
May 15 Python
利用Python写一个爬妹子的爬虫
Jun 08 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
Django 实现前端图片压缩功能的方法
Aug 07 Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 Python
Django 限制访问频率的思路详解
Dec 24 Python
python的sys.path模块路径添加方式
Mar 09 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
python collections模块的使用
Oct 16 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
python四种出行路线规划的实现
Jun 23 Python
Python操作Sql Server 2008数据库的方法详解
May 17 #Python
Python读写及备份oracle数据库操作示例
May 17 #Python
Python selenium抓取微博内容的示例代码
May 17 #Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 #Python
Python实现读取txt文件并转换为excel的方法示例
May 17 #Python
cmd运行python文件时对结果进行保存的方法
May 16 #Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 #Python
You might like
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
PHP strtr() 函数使用说明
2008/11/21 PHP
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
js 数据类型转换总结笔记
2011/01/17 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
Python 专题四 文件基础知识
2017/03/20 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
python读取Excel表格文件的方法
2019/09/02 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
Python如何实现单例模式
2016/06/03 面试题
社会治安综合治理管理责任书
2014/04/16 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
社区务虚会发言材料
2014/10/20 职场文书
科级干部培训心得体会
2016/01/06 职场文书
Nginx中使用Lua脚本与图片的缩略图处理的实现
2022/03/18 Servers