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的Django框架来制作一个RSS阅读器
Jul 22 Python
使用python检测主机存活端口及检查存活主机
Oct 12 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 Python
windows下python 3.6.4安装配置图文教程
Aug 21 Python
python字符串循环左移
Mar 08 Python
python实现视频读取和转化图片
Dec 10 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
Python模块的制作方法实例分析
Dec 21 Python
简单了解Python write writelines区别
Feb 27 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
python将图片转为矢量图的方法步骤
Mar 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
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
iframe的父子窗口之间的对象相互调用基本用法
2013/09/03 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
一些可能会用到的Node.js面试题
2019/06/15 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
python pillow库的基础使用教程
2021/01/13 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
安踏官方商城:anta.cn
2019/12/16 全球购物
2014年教师学期工作总结
2014/11/08 职场文书
婚宴主持词
2015/06/30 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
python保存图片的四个常用方法
2022/02/28 Python