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中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
Python单链表简单实现代码
Apr 27 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
详解python eval函数的妙用
Nov 16 Python
python实现树形打印目录结构
Mar 29 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
Pyqt5实现英文学习词典
Jun 24 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
Python使用pyenv实现多环境管理
Feb 05 Python
python实现过滤敏感词
May 08 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
用ODBC的分页显示
2006/10/09 PHP
html中select语句读取mysql表中内容
2006/10/09 PHP
php实现将Session写入数据库
2015/07/26 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
js判断节假日实例代码
2017/12/27 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
跟老齐学Python之折腾一下目录
2014/10/24 Python
python脚本设置超时机制系统时间的方法
2016/02/21 Python
itchat接口使用示例
2017/10/23 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
详解Python 中的容器 collections
2020/08/17 Python
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
幼儿园毕业典礼主持词
2014/03/21 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
拾金不昧感谢信
2015/01/21 职场文书
开平碉楼导游词
2015/02/06 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
红色经典电影观后感
2015/06/18 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书