2011/02/03

Recent entries from same category

  1. RapidJSON や simdjson よりも速いC言語から使えるJSONライブラリ「yyjson」
  2. コメントも扱える高機能な C++ 向け JSON パーサ「jsoncpp」
  3. C++ で flask ライクなウェブサーバ「clask」書いた。
  4. C++ 用 SQLite3 ORM 「sqlite_orm」が便利。
  5. zsh で PATH に相対パスを含んだ場合にコマンドが補完できないのは意図的かどうか。

最近phantomjsなんて物が出てきて結構便利そうなのでいろいろと遊んでます。
PhantomJS: 「最小限なheadlessのWebKitベースのJavaScriptツール」 - karasuyamatenguの日記

headless=スクリーンがない=コマンドと考えればいい。要はブラウザから画面と取り除いてJavaScriptによるスクリプティングを可能にしたコマンドツール。逆に言うとDOM+JavaScript+Networkingをコマンドにしたもの。...

http://d.hatena.ne.jp/karasuyamatengu/20110126/1296066287
phantomjs - Project Hosting on Google Code

PhantomJS is a minimalistic, headless, WebKit-based, JavaScript-driven tool. It has native support f...

http://code.google.com/p/phantomjs/
ただちょっと改造したいとか、それだけの為にQt入れたくないよーとか、staticビルドすんのに4時間もかかるのかよ!とかお嘆きの方もいらっしゃると思ったので...

phantomjs を webkitgtk+ でうごかしたらいいんじゃね、とおもってやってたけど、コンパイルに必要なモジュールおおすぎてあきらめたless than a minute ago via Echofon



QtWebKitでなく、webkitgtk+で実装してみました。
mattn/specterjs - GitHub

SpecterJS is a minimalistic, headless, WebKit-based, JavaScript-driven tool.

https://github.com/mattn/specterjs
ほとんどphantomjs互換です。phantomjsのphantomは幽霊って意味だったので、妖怪という意味のspecterを使いspecterjsと名付けました。
ただまだ制限があって、renderで扱えるのはpdfのみです。png出力にはまだ対応出来ていません。これはいずれやります。おそらくcairoとGtkPrintContext使えばいけるかと思います。
次にrenderで使用する際のviewportSizeが正しく機能していません。
それ以外は動くのでphantomjsについているサンプルの殆どが動きます。
ちなみに
if (specter.state.length === 0) {
    specter.state = 'mcdonalds';
    specter.open('http://www.mcdonalds.co.jp/menu/regular/index.html');
else {
    [].forEach.call(document.querySelectorAll('ul.food-set>li img'),
        function(n) { console.log(n.getAttribute('alt')); });
    specter.exit();
}
で、マクドナルドのメニュー一覧を出すことも出来ちゃいます!
よろしかったら遊んで下さい。
Posted at by