Python实现的网页截图功能【PyQt4与selenium组件】


Posted in Python onJuly 12, 2018

本文实例讲述了Python实现的网页截图功能。分享给大家供大家参考,具体如下:

方法一、使用PyQt4的QtWebKit组件

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
import os.path
from PyQt4 import QtGui,QtCore,QtWebKit
class PageShotter(QtGui.QWidget):
  def __init__(self,url,filename,parent=None):
    QtGui.QWidget.__init__(self,parent)
    self.url = url
    self.filename = filename
    self.webpage = None
  def shot(self):
    webview = QtWebKit.QWebView(self)
    webview.load(QtCore.QUrl(self.url))
    self.webpage = webview.page()
    self.connect(webview,QtCore.SIGNAL("loadFinished(bool)"),self.save_page)
  def save_page(self,finished):
    #print finished
    if finished:
      print u"开始截图!"
      size = self.webpage.mainFrame().contentsSize()
      print u"页面宽:%d,页面高:%d" % (size.width(),size.height())
      self.webpage.setViewportSize(QtCore.QSize(size.width()+16,size.height()))
      img = QtGui.QImage(size, QtGui.QImage.Format_ARGB32)
      painter = QtGui.QPainter(img)
      self.webpage.mainFrame().render(painter)
      painter.end()
      filename= self.filename;
      if img.save(filename):
        filepath = os.path.join(os.path.dirname(__file__), filename)
        print u"截图完毕:%s" % filepath
      else:
        print u"截图失败";
    else:
      print u"网页加载失败!"
    self.close()
if __name__=="__main__":
  app = QtGui.QApplication(sys.argv)
  shotter = PageShotter("https://3water.com/", 'shot.png')
  shotter.shot()
  sys.exit(app.exec_())

运行后输出:

QFont::setPixelSize: Pixel size <= 0 (0)
开始截图!
页面宽:1058,页面高:9819
截图完毕:C:\py\3waterPyDemo\src\Demo\shot.png

注:

Python2的32位操作系统安装包可至此下载:https://3water.com/softs/548192.html
64位操作系统下对应PyQt安装包可至此下载:https://3water.com/softs/548197.html)

Python3可直接使用pip命令安装PyQt5库,如:

pip3 install PyQt5-sip

方法二、使用selenium

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import time
from selenium import webdriver
browser = webdriver.Firefox()
browser.set_window_size(1055, 800)
browser.get("https://3water.com/")
browser.find_element_by_id("idClose").click()
time.sleep(5)
browser.save_screenshot("shot.png")
browser.quit()

PS:selenium库同样可以使用pip命令安装:

pip install selenium

另外,使用selenium时还需要下载geckodriver来驱动第三方浏览器,对于selenium3.x版本都会使用geckodriver来驱动firefox,所以需要下载geckodriver.exe,下载地址:https://github.com/mozilla/geckodriver/releases

下载后将geckodriver.exe放在C:\Python27即可(查看环境变量path中是否添加C:\Python27该路径)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
Feb 14 Python
Python之str操作方法(详解)
Jun 19 Python
用Python写一段用户登录的程序代码
Apr 22 Python
基于python历史天气采集的分析
Feb 14 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
Python函数和模块的使用总结
May 20 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
Python爬虫爬取ts碎片视频+验证码登录功能
Feb 22 Python
Python实现归一化算法详情
Mar 18 Python
python基础学习之如何对元组各个元素进行命名详解
Jul 12 #Python
详解Python中的分组函数groupby和itertools)
Jul 11 #Python
Python中的groupby分组功能的实例代码
Jul 11 #Python
python中实现字符串翻转的方法
Jul 11 #Python
Python3.7中安装openCV库的方法
Jul 11 #Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 #Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 #Python
You might like
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
2020/05/02 PHP
js异或加解密效果代码
2008/06/25 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
基于python的字节编译详解
2017/09/20 Python
python用插值法绘制平滑曲线
2021/02/19 Python
django 类视图的使用方法详解
2019/07/24 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
2016年教师节感言
2015/12/09 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书