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控制台显示时钟的示例
Feb 24 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
python从子线程中获得返回值的方法
Jan 30 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
python读取.mat文件的数据及实例代码
Jul 12 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
详解python with 上下文管理器
Sep 02 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 Python
详解如何使用Pytest进行自动化测试
Jan 14 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
一文搞懂Python Sklearn库使用
Aug 23 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
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
PHP版 汉字转码的实现详解
2013/06/09 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
Python获取邮件地址的方法
2015/07/10 Python
python实现验证码识别功能
2018/06/07 Python
python实现贪吃蛇小游戏
2020/03/21 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python集合是否可变总结
2019/06/20 Python
详解Python打包分发工具setuptools
2019/08/05 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
工程概预算专业毕业生求职信
2013/10/04 职场文书
高中自我鉴定范文
2013/11/03 职场文书
出国留学介绍信
2014/01/13 职场文书
表彰会主持词
2014/03/26 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
教师自查自纠材料
2014/10/14 职场文书
党支部鉴定意见
2015/06/02 职场文书
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis