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实现随机漫步功能,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-07-07
  • python和opencv构建运动检测器的实现

    python和opencv构建运动检测器的实现

    这篇文章主要介绍了python和opencv构建运动检测器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 对python numpy数组中冒号的使用方法详解

    对python numpy数组中冒号的使用方法详解

    下面小编就为大家分享一篇对python numpy数组中冒号的使用方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • PyCharm的设置方法和第一个Python程序的建立

    PyCharm的设置方法和第一个Python程序的建立

    今天小编就为大家分享一篇PyCharm的设置方法和第一个Python程序的建立,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 一文详解测试Python读写xml配置文件

    一文详解测试Python读写xml配置文件

    这篇文章主要介绍了一文详解测试Python读写xml配置文件,xml也是常用的配置文件格式之一,Python中的xml.etree.ElementTree模块支持解析和创建xml数据
    2022-09-09
  • python中的字典及嵌套遍历

    python中的字典及嵌套遍历

    这篇文章主要介绍了python中的字典及嵌套遍历,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • python 筛选数据集中列中value长度大于20的数据集方法

    python 筛选数据集中列中value长度大于20的数据集方法

    今天小编就为大家分享一篇python 筛选数据集中列中value长度大于20的数据集方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 浅谈MySQL中的触发器

    浅谈MySQL中的触发器

    这篇文章主要介绍了MySQL中的触发器,包括使用触发器添加、更新、删除用户等操作,需要的朋友可以参考下
    2015-05-05
  • 用 Python 元类的特性实现 ORM 框架

    用 Python 元类的特性实现 ORM 框架

    利用 Python 元类的特性实现 ORM 框架的 insert 功能,通过操作类对象,对数据表进行数据增加操作。由于 ORM 比较复杂,也不要重复造轮子,就完成一个 insert 相类似的ORM,理解其中的道理即可。
    2021-05-05
  • Django如何与Ajax交互

    Django如何与Ajax交互

    Django前端模板向后端发送POST请求主要有两种方式:form表单和ajax请求。本文将详细介绍Django与Ajax的交互方式,如何通过csrftoken认证,并提供了两个具体示例。
    2021-04-04

最新评论