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中的map、reduce和filter浅析
Apr 26 Python
Python使用functools模块中的partial函数生成偏函数
Jul 02 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
Dec 10 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
关于阿里云oss获取sts凭证 app直传 python的实例
Aug 20 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 Python
python计算二维矩形IOU实例
Jan 18 Python
python打开音乐文件的实例方法
Jul 21 Python
基于Python编写一个监控CPU的应用系统
Jun 25 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系统流量分析的程序
2006/10/09 PHP
如何在PHP中使用Oracle数据库(2)
2006/10/09 PHP
用php获取远程图片并把它保存到本地的代码
2008/04/07 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
PHP 之Section与Cookie使用总结
2012/09/14 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
JavaScript之数组扁平化详解
2019/06/03 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
Python中基础的socket编程实战攻略
2016/06/01 Python
Python爬取三国演义的实现方法
2016/09/12 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
简单介绍django提供的加密算法
2019/12/18 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
学期自我鉴定范文
2013/10/01 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
求职自我评价怎么写
2015/03/09 职场文书
体育部部长竞选稿
2015/11/21 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python