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编写一个基于终端的实现翻译的脚本
Apr 24 Python
python中执行shell的两种方法总结
Jan 10 Python
详谈python read readline readlines的区别
Sep 22 Python
Python中使用支持向量机SVM实践
Dec 27 Python
python实现复制大量文件功能
Aug 31 Python
Python @property使用方法解析
Sep 17 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
Python的历史与优缺点整理
May 26 Python
浅谈Python中的模块
Jun 10 Python
Python装饰器如何实现修复过程解析
Sep 05 Python
python基于opencv实现人脸识别
Jan 04 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+mysql分页代码详解
2008/03/27 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
javascript编程起步(第七课)
2007/01/10 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
python实现微信远程控制电脑
2018/02/22 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
python实现简单的五子棋游戏
2020/09/01 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
python从Oracle读取数据生成图表
2020/10/14 Python
What is view? why do we have view?
2012/06/22 面试题
策划助理岗位职责
2013/11/18 职场文书
远程研修随笔感言
2014/02/10 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
联欢晚会主持词
2014/03/25 职场文书
承诺书怎么写
2014/03/26 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS