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正则表达式介绍
Aug 06 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
python实现猜数字小游戏
Mar 24 Python
python代码过长的换行方法
Jul 19 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
python如何实现一个刷网页小程序
Nov 27 Python
Python语言快速上手学习方法
Dec 14 Python
Python基础之文件读取的讲解
Feb 16 Python
pytorch获取vgg16-feature层输出的例子
Aug 20 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
python如何做代码性能分析
Apr 26 Python
Pandas实现DataFrame的简单运算、统计与排序
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
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
深入理解NumPy简明教程---数组2
2016/12/17 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
python中的for循环
2018/09/28 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Python面向对象之Web静态服务器
2019/09/03 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
护士求职推荐信范文
2013/11/23 职场文书
寒假思想汇报
2014/01/10 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
幼儿园小班评语
2014/04/18 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
用Python爬取某乎手机APP数据
2021/06/15 Python