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,比如:
同时,它也支持多种语言开发,因此我们可以很轻松使用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 截图时会自动进行滚屏,截取整个网页的内容。
评论