在爬虫开发过程中,或者其他方面有时候会有这种需求,截取网页图片,作为一种快照信息进行存储,在最近开发过程中也刚好碰到了这种需求,需要将爬虫过程中的网页进行快照信息保存,因此查看了一部分文档,现提供以下两种方式进行快照截图。
Python版本
python需要安装selenium,通过pip方式便可安装,期中下面有三种方式:
1. 调用Chrome或者FireFox浏览器方式,这种都需要打开本地一个无头浏览器,而这个浏览器需要自己单独下载,否则会报异常,网上例子很多,不再描述,下载后放置与python.exe同级目录便可运行,这两种方式都只能截取浏览器部分截图,如果该页面有滚动条,那么下面页面是无法截取到的。
2. 调用PhantomJS方式,这种就是解决滚动截屏问题,可以自动将当前浏览器页面全部内容截取,并且不打开浏览器,不用额外安装其他东西,至于其他带cookie,post,get不同请求请查阅其他资料。
from selenium import webdriver
# 使用PhantomJS获取浏览器截图,会截取整个网页信息,包含滚动条以下部分
br = webdriver.PhantomJS()
br.maximize_window()
br.get("http://www.baidu.com")
br.save_screenshot("./baidu01.png")
# 使用chrome浏览器获取浏览器截图,只会截取展现部分
br = webdriver.Chrome()
br.maximize_window()
br.get("http://www.baidu.com")
br.save_screenshot("./baidu02.png")
# 使用Firefox浏览器获取浏览器截图,只会截取展现部分
br = webdriver.Firefox()
br.maximize_window()
br.get("http://www.baidu.com")
br.save_screenshot("./baidu03.png")
JAVA版本
Java主要两种方式:
一种是Robot方式,这种截图不但可以截图,还可以实现一起操控类,截图只是它一个小功能,例子中也只是简单打开浏览器,截取当前显示部分,然后保存成图片,关闭浏览器,因此对于存在滚动条的,无法全部截取,因为要模拟操控滚动条,形成一个输入流,循环读取,显得太过于麻烦,不太通用。不过Robot最主要的并不是截图,而是操控,没准需要固定点击的可以用该方式模拟操作呢。
public class CutPicture {
/**
* 图像截取并保存
* @param url: 请求链接
* @throws MalformedURLException
* @throws IOException
* @throws URISyntaxException
* @throws AWTException
*/
public static void saveHtmlImg(String url) throws IOException, URISyntaxException, AWTException {
Desktop.getDesktop().browse(new URL(url).toURI());
Robot robot = new Robot();
robot.delay(2000);