Python中使用 Selenium 实现网页截图实例

 更新时间:2014年07月18日 10:41:35   投稿:junjie  
这篇文章主要介绍了Python中使用 Selenium 实现网页截图实例,Selenium支持Java、C#、Ruby 以及 Python等语言,本文以Python语言为例,需要的朋友可以参考下

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://www.jb51.net")

注意到,上面的代码中,我并没有在打开页面后立即截图,而是先在页面上执行了一段 JavaScript 脚本,先将页面的滚动条拖到最下方,再拖回顶部,然后才截图。这样的好处是如果页面下方有一些延迟加载的内容,在这个操作之后一般也都已加载了。

与 PageSaver 等浏览器插件相比,Selenium 功能更为强大,例如,它可以在页面上注入并执行一段 JS,还可以模拟鼠标点击等行为,而且可以同时运行多个实例(多个线程同时截图)。这样看来,使用 Selenium 来给页面截图似乎是一个不错的选择。

相关文章

  • 详解Python中通用工具类与异常处理

    详解Python中通用工具类与异常处理

    在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationException,并创建一个通用的工具类Utils,需要的可以参考下
    2024-12-12
  • Python简明入门教程

    Python简明入门教程

    这篇文章主要介绍了Python简明入门教程,较为详细的分析了Python的基本概念及语法基础,有助于Python初学者更好的掌握Python的基本语法与使用技巧,需要的朋友可以参考下
    2015-08-08
  • 谈谈Python:为什么类中的私有属性可以在外部赋值并访问

    谈谈Python:为什么类中的私有属性可以在外部赋值并访问

    这篇文章主要介绍了谈谈Python:为什么类中的私有属性可以在外部赋值并访问,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python如何获取网络数据

    python如何获取网络数据

    这篇文章主要介绍了python如何获取网络数据,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • python类继承用法实例分析

    python类继承用法实例分析

    这篇文章主要介绍了python类继承用法,实例分析了Python类的定义与类继承的实现技巧,需要的朋友可以参考下
    2015-05-05
  • pyQt4实现俄罗斯方块游戏

    pyQt4实现俄罗斯方块游戏

    这篇文章主要为大家详细介绍了pyQt4实现俄罗斯方块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 浅谈pytorch、cuda、python的版本对齐问题

    浅谈pytorch、cuda、python的版本对齐问题

    今天小编就为大家分享一篇浅谈pytorch、cuda、python的版本对齐问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 使用Gitee自动化部署python脚本的详细过程

    使用Gitee自动化部署python脚本的详细过程

    小编最近在自学python,在学习过程中有好多意向不到的收获,真的很开心,今天重点给大家分享使用Gitee自动化部署python脚本的详细过程,包括安装环境搭建及一些注意事项,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • python中的IO流使用解读

    python中的IO流使用解读

    这篇文章主要介绍了python中的IO流使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • django使用LDAP验证的方法示例

    django使用LDAP验证的方法示例

    这篇文章主要介绍了django使用LDAP验证的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论