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中使用pyhook实现键盘监控的例子
Jul 18 Python
python字典get()方法用法分析
Apr 17 Python
Python实现批量转换文件编码的方法
Jul 28 Python
Python生成随机密码的方法
Jun 16 Python
Python使用Phantomjs截屏网页的方法
May 17 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
Python3数字求和的实例
Feb 19 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
20行Python代码实现视频字符化功能
Apr 13 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
Python闭包的定义和使用方法
Apr 11 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
桌面中心(二)数据库写入
2006/10/09 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
php解决安全问题的方法实例
2019/09/19 PHP
网页图片延时加载的js代码
2010/04/22 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
python错误处理详解
2014/09/28 Python
Python进行数据科学工作的简单入门教程
2015/04/01 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
小学数学教学经验交流材料
2014/05/22 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
环卫工作汇报材料
2014/10/28 职场文书
幼儿园见习报告
2014/10/30 职场文书
老乡聚会通知
2015/04/23 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
针对吵架老公保证书
2015/05/08 职场文书