Python中使用 Selenium 实现网页截图实例


Posted in Python onJuly 18, 2014

Selenium 是一个可以让浏览器自动化地执行一系列任务的工具,常用于自动化测试。不过,也可以用来给网页截图。目前,它支持 Java、C#、Ruby 以及 Python 四种客户端语言。如果你使用 Python,则只需要在命令行里输入“sudo easy_install selenium”并回车,即可安装 selenium 的 Python 版本的客户端支持。

以 Python 为例,我们可以使用下面的脚本来给指定页面(比如三水点靠木首页)截图:

# -*- coding: utf-8 -*-
#
# author: oldj <oldj.wu@gmail.com>
#

from selenium import webdriver
import time


def capture(url, save_fn="capture.png"):
  browser = webdriver.Firefox() # Get local session of firefox
  browser.set_window_size(1200, 900)
  browser.get(url) # Load page
  browser.execute_script("""
    (function () {
      var y = 0;
      var step = 100;
      window.scroll(0, 0);

      function f() {
        if (y < document.body.scrollHeight) {
          y += step;
          window.scroll(0, y);
          setTimeout(f, 50);
        } else {
          window.scroll(0, 0);
          document.title += "scroll-done";
        }
      }

      setTimeout(f, 1000);
    })();
  """)

  for i in xrange(30):
    if "scroll-done" in browser.title:
      break
    time.sleep(1)

  browser.save_screenshot(save_fn)
  browser.close()


if __name__ == "__main__":

  capture("https://3water.com")

注意到,上面的代码中,我并没有在打开页面后立即截图,而是先在页面上执行了一段 JavaScript 脚本,先将页面的滚动条拖到最下方,再拖回顶部,然后才截图。这样的好处是如果页面下方有一些延迟加载的内容,在这个操作之后一般也都已加载了。

与 PageSaver 等浏览器插件相比,Selenium 功能更为强大,例如,它可以在页面上注入并执行一段 JS,还可以模拟鼠标点击等行为,而且可以同时运行多个实例(多个线程同时截图)。这样看来,使用 Selenium 来给页面截图似乎是一个不错的选择。

Python 相关文章推荐
利用python批量修改word文件名的方法示例
Oct 17 Python
Python内置函数 next的具体使用方法
Nov 24 Python
Python科学画图代码分享
Nov 29 Python
python中类的属性和方法介绍
Nov 27 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
Mar 20 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
Keras实现DenseNet结构操作
Jul 06 Python
Python中使用PyHook监听鼠标和键盘事件实例
Jul 18 #Python
python中使用pyhook实现键盘监控的例子
Jul 18 #Python
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 #Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 #Python
python采集博客中上传的QQ截图文件
Jul 18 #Python
Python下singleton模式的实现方法
Jul 16 #Python
python的迭代器与生成器实例详解
Jul 16 #Python
You might like
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
一个很不错的PHP翻页类
2009/06/01 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
CI框架表单验证实例详解
2016/11/21 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
微信小程序合法域名配置方法
2019/05/06 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
对于Python中线程问题的简单讲解
2015/04/03 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
简单了解python变量的作用域
2019/07/30 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
pycharm实现猜数游戏
2020/12/07 Python
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
自荐书范文范例
2014/02/13 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
学习委员竞选稿
2015/11/20 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
Python List remove()实例用法详解
2021/08/02 Python
浅谈Java父子类加载顺序
2021/08/04 Java/Android