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 异常处理实例详解
Mar 12 Python
Python赋值语句后逗号的作用分析
Jun 08 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
Python分析学校四六级过关情况
Nov 22 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
如何使用python代码操作git代码
Feb 29 Python
使用Python实现音频双通道分离
Dec 25 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 Python
python 中[0]*2与0*2的区别说明
May 10 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
php5新改动之短标记启用方法
2008/09/11 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
培养自己的php编码规范
2015/09/28 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
详解Python命令行解析工具Argparse
2016/04/20 Python
Python内置函数OCT详解
2016/11/09 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
计算机专业毕业生推荐信
2013/11/25 职场文书
大四学生个人总结
2015/02/15 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
安全生产标语口号
2015/12/26 职场文书
高中班主任心得体会
2016/01/07 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
Java无向树分析 实现最小高度树
2022/04/09 Javascript
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS