website capture를 위한 ruby gem (feat PhantomJS)

이번 주말엔 딱히 쓸 글이 없네요.. (시간이 ㅜㅜ) 간략하게 ruby library를 이용한 웹 페이지 캡쳐 관련해서 글 작성해봅니다.

어제 저녁쯤에 필요에 의해 몇가지 스크립트를 짜던 중 웹 페이지를 캡쳐할 일이 있었는데요, ruby library 로 뭐뭐가 있나 찾아봤더니 몇가지가 있더군요 .

webshot

require 'webshot'
screenshot = Webshot::Screenshot.instance
screenshot.capture "https://www.google.com", "image.png", width: 800, height: 800 

gastly

require 'gastly'
Gastly.capture('http://google.com', 'output.png')

screencap

require 'screencap'
fetcher_object = Screencap::Fetcher.new('https://www.google.com')
screenshot = fetcher_object.fetch

공통점

예시로 드린건 3개의 라이브러리지만 굉장히 많은 라이브러리들이 있습니다. 재미있는건 모두가 비슷한 공통점을 하나씩 가지고 있다는 것인데요. 바로 phantomJS의 사용입니다.

phantomJS는 헤드리스 브라우저로 웹 관련 자동화에서 많이 쓰입니다. ui를 사용하지 않고 웹 탐색이 가능하기 때문에 크롤링이나 스캐너 같은 부분에서 사용했었느데, 캡쳐에서도 이를 이용하더군요. 심지어 팬텀js를 자체로도 캡쳐가 가능하죠.

test.js

var page = require('webpage').create();
page.open('http://www.google.com/', function() {
  page.render('output.png');
  phantom.exit();
});
#> phantomjs test.js

Reference

http://phantomjs.org/screen-capture.html