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递归遍历列表及输出的实现方法
May 19 Python
python 类详解及简单实例
Mar 24 Python
scrapy爬虫实例分享
Dec 28 Python
Python 循环语句之 while,for语句详解
Apr 23 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
django的model操作汇整详解
Jul 26 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
python中random模块详解
Mar 01 Python
解决pytorch-gpu 安装失败的记录
May 24 Python
Python Matplotlib绘制动画的代码详解
May 30 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
是否存在第一台收音机的说法
2021/03/01 无线电
PHP 和 XML: 使用expat函数(二)
2006/10/09 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
深入理解JavaScript定时机制
2010/10/29 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
Python制作CSDN免积分下载器
2015/03/10 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
500行python代码实现飞机大战
2020/04/24 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
数字化校园建设方案
2014/05/03 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
大学生个人学年总结
2015/02/15 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
为自己工作观后感
2015/06/11 职场文书
庆七一活动简报
2015/07/20 职场文书