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写的图片蜘蛛人代码
Aug 27 Python
python定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
Python Nose框架编写测试用例方法
Oct 26 Python
Python3匿名函数lambda介绍与使用示例
May 18 Python
python可视化篇之流式数据监控的实现
Aug 07 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
python__new__内置静态方法使用解析
Jan 07 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
python有几个版本
Jun 17 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
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
快速了解python leveldb
2018/01/18 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
学校读书活动总结
2014/06/30 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
简单谈谈Python面向对象的相关知识
2021/06/28 Python