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的web.py框架下的application.py模块
May 02 Python
python常用函数详解
Sep 13 Python
MySQL适配器PyMySQL详解
Sep 20 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
Python闭包函数定义与用法分析
Jul 20 Python
python+pygame实现坦克大战
Sep 10 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
Python selenium实现断言3种方法解析
Sep 08 Python
python time()的实例用法
Nov 03 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 Python
PyQt5结合QtDesigner实现文本框读写操作
Jun 11 Python
如何利用Python实现一个论文降重工具
Jul 09 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
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
js实现常用排序算法
2016/08/09 Javascript
js实现漫天星星效果
2017/01/19 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
Python转换HTML到Text纯文本的方法
2015/01/15 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
Python2中文处理纪要的实现方法
2018/03/10 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python tkinter实现日期选择器
2021/02/22 Python
幼儿园园长自我鉴定
2013/10/22 职场文书
学校采购员岗位职责
2014/01/02 职场文书
清明节演讲稿
2014/05/27 职场文书
七一建党节演讲稿
2014/09/11 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
三严三实学习心得体会
2014/10/13 职场文书
办公用房租赁协议书
2014/11/29 职场文书
施工员岗位职责范本
2015/04/11 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
Java对文件的读写操作方法
2022/04/29 Java/Android