• 隐藏侧边栏
  • 展开分类目录
  • 关注微信公众号
  • 我的GitHub
  • QQ:1753970025
Chen Jiehua

Selenium+PhantomJS 生成网页截图 

目录

最近需要对一些网页进行批量截图,使用普通的截图工具手动操作,不仅效率低下而且效果不好。因此,便寻思着有什么捷径可走……

Chrome Plugin

使用chrome的插件可以非常方便实现截屏,我找了一个 Full Page Screenshot,效果算是比较不错:

不过虽然方便,但还是需要手动操作,并不能实现真正的自动化。

Selenium

简介

Selenium是什么?

Selenium automates browsers. That’s it! What you do with that power is entirely up to you. Primarily, it is for automating web applications for testing purposes, but is certainly not limited to just that. Boring web-based administration tasks can (and should!) be automated as well.

简单地可以理解:Selenium是一个针对网络应用的自动化测试工具,它可以控制浏览器模拟人的操作进行各种测试。

Selenium支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器;每个浏览器都有对应的driver,比如:

Chrome:https://sites.google.com/a/chromium.org/chromedriver/downloads
Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox:https://github.com/mozilla/geckodriver/releases
Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/

同时,它也支持多种语言开发,因此我们可以很轻松使用python进行开发:

# 安装
pip install selenium

小试牛刀

假设我们已经下载了chrome的webdriver,写个脚本测试一下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from selenium import webdriver

def main():
    driver = webdriver.Chrome("chromedriver")
    driver.get("http://www.baidu.com")
    print(driver.title)
    driver.close()


if __name__ == "__main__":
    main()

对于Chrome driver 更详细的API可以参考文档:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.chrome.webdriver

PhantomJS

Selenium 需要一个 webdriver,而上面提到的Chrome、Firefox 等都是有界面的浏览器,在实际使用过程中运行效率比较低。

而 PhantomJS 是一个基于webkit的没有界面的浏览器,它可以像浏览器一样解析网页,并且具有更高的性能。

安装

官网 下载合适版本的webdriver~

试一试

跟 Chrome 一样,只需要指定 webdriver 即可:

driver = webdriver.PhantomJS("phantomjs")

关于 PhantomJS 的API也可以参考文档:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.chrome.webdriver

自动化截图

使用 Selenium + PhantomJS,截图这个琐碎的过程就可以完全用代码自动化完成了:

driver = webdriver.PhantomJS("phantomjs")
driver.get("http://www.baidu.com")
# 使用 save_screenshot 进行截图
driver.save_screenshot("page.png")

当然,我们还可以指定浏览器的宽度和高度,使截图尺寸更加完美:

driver.set_window_size(375, 667)

使用 PhantomJS 截图时会自动进行滚屏,截取整个网页的内容。

 

 

码字很辛苦,转载请注明来自ChenJiehua《Selenium+PhantomJS 生成网页截图》

评论