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程序与C程序的结合使用
Apr 07 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
python数字图像处理之高级形态学处理
Apr 27 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
Django实现发送邮件功能
Jul 18 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
Pytorch释放显存占用方式
Jan 13 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 Python
Python下载的11种姿势(小结)
Nov 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
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
python函数的5种参数详解
2017/02/24 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
微信跳一跳python代码实现
2018/01/05 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
婚礼司仪主持词
2014/03/14 职场文书
基层党员对照检查材料
2014/08/25 职场文书
介绍信范文
2015/01/31 职场文书
北京导游词
2015/02/12 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
小学副班长竞选稿
2015/11/21 职场文书
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript