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 IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
python中的for循环
Sep 28 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
微信小程序python用户认证的实现
Jul 29 Python
python二元表达式用法
Dec 04 Python
Django-silk性能测试工具安装及使用解析
Nov 28 Python
Python 实现集合Set的示例
Dec 21 Python
python 对xml解析的示例
Feb 27 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 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
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
python静态方法实例
2015/01/14 Python
Python用模块pytz来转换时区
2016/08/19 Python
Python 装饰器深入理解
2017/03/16 Python
python生成式的send()方法(详解)
2017/05/08 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
文员的职业生涯规划发展方向
2014/02/08 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
Python 数据可视化之Matplotlib详解
2021/11/02 Python