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的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
Python获取当前路径实现代码
May 08 Python
python递归实现快速排序
Aug 18 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 Python
在python中实现强制关闭线程的示例
Jan 22 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
Sep 30 Python
如何通过Django使用本地css/js文件
Jan 20 Python
如何利用Python识别图片中的文字
May 31 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 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
第六节 访问属性和方法 [6]
2006/10/09 PHP
php文件上传表单摘自drupal的代码
2011/02/15 PHP
php中转义mysql语句的实现代码
2011/06/24 PHP
用js重建星际争霸
2006/12/22 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
python中循环语句while用法实例
2015/05/16 Python
pandas object格式转float64格式的方法
2018/04/10 Python
python 以16进制打印输出的方法
2018/07/09 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
业绩考核岗位职责
2014/02/01 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
离婚财产处理协议书
2014/09/30 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
校运会通讯稿
2015/07/18 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
2016年安全月活动总结
2016/04/06 职场文书
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
利用Java连接Hadoop进行编程
2022/06/28 Java/Android