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 10 Python
python使用socket连接远程服务器的方法
Apr 29 Python
python模拟enum枚举类型的方法小结
Apr 30 Python
理解python中生成器用法
Dec 20 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
python实现Windows电脑定时关机
Jun 20 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
python实现数据分析与建模
Jul 11 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
Python logging模块写入中文出现乱码
May 21 Python
python实现二分查找算法
Sep 18 Python
详解Python flask的前后端交互
Mar 31 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
PHP4(windows版本)中的COM函数
2006/10/09 PHP
php 操作excel文件的方法小结
2009/12/31 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
python2和python3哪个使用率高
2020/06/23 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
Java面向对象面试题
2016/12/26 面试题
2014年团队工作总结
2014/11/24 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
清明扫墓感想
2015/08/11 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript