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 相关文章推荐
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 Python
在Python的Django框架上部署ORM库的教程
Apr 20 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
多版本Python共存的配置方法
May 22 Python
Python中扩展包的安装方法详解
Jun 14 Python
为什么Python中没有&quot;a++&quot;这种写法
Nov 27 Python
python的内存管理和垃圾回收机制详解
May 18 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
python实现实时视频流播放代码实例
Jan 11 Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 Python
python3.6使用SMTP协议发送邮件
May 20 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 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中date()日期函数有关参数整理
2011/07/19 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
React学习笔记之事件处理(二)
2017/07/02 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
python实现简单神经网络算法
2018/03/10 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
彪马法国官网:PUMA法国
2019/12/15 全球购物
上海期货面试题
2014/01/31 面试题
行政专员的岗位职责
2014/03/10 职场文书
慈善晚会策划方案
2014/05/14 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
关于做家务的心得体会
2016/01/23 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS