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 相关文章推荐
Windows下PyMongo下载及安装教程
Apr 27 Python
Python通过select实现异步IO的方法
Jun 04 Python
python Django框架实现自定义表单提交
Mar 25 Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 Python
Python中logging实例讲解
Jan 17 Python
利用Python脚本实现自动刷网课
Feb 03 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
Pandas的Apply函数具体使用
Jul 21 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
Python与C/C++的相互调用案例
Mar 04 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 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之第一天
2006/10/09 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
Python写的贪吃蛇游戏例子
2014/06/16 Python
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
遗传算法python版
2018/03/19 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
中国文明网签名寄语
2014/01/18 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
优秀纪检干部材料
2014/08/27 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
MySQL分区表实现按月份归类
2021/11/01 MySQL