Nightmare 勉強メモ

■Nightmareとは
ブラウザ上の操作の自動化ライブラリ。

■公式サイト
http://www.nightmarejs.org/
不思議なデザインですけど、分かりやすい紹介サイト。

■公式の使い方ページ
https://github.com/segmentio/nightmare
ページの下の方のコメントみたいなのに使い方が書いてある。NightMareのインスタンスを作って、それのメソッドを読んで使うっぽい。

■日本語サイト
http://kurokokoruru.hatenablog.com/entry/2016/01/03/185817
ありがたや。。

■インストー
npm install nightmare
nodeがPCにインストールしてあれば、npmコマンドが使える。

■package.jsonの使い方
http://www.hirooooo-lab.com/entry/development/npm-command
package.jsonを配布して、それをまとめてインストールなんてことができるんですかね。pom.xmlみたいなものかなあ。使いたくない。

■非同期処理の説明
http://qiita.com/KDKTN/items/4c6986049d204f0645d8

■使用例(npm install vo する必要ある) どっかのサイト様からコピペ

var Nightmare = require('nightmare');
var vo = require('vo');

vo(run)(function(err, result) {
  if (err) throw err;
});

function* run() {
var nightmare = Nightmare();
var title = yield nightmare
  .goto('http://cnn.com')
  .evaluate(function() {
    return document.title;
});
console.log(title);
yield nightmare.end();
}

アスタリスク?ジェネレーター??意味の分からない構文を調べてみたら、だいたい非同期処理がどうのって出てくるんですが、パフォーマンスとかそんな気にしないから普通の構文で書いてくれませんかね。。なぜわざわざ難しい書き方をするのか。。。非同期処理で嬉しいシーンに遭遇したことがあるんですか?ただ何となくそう書いてませんか?と問いたいですね。。まあ自分はJavaScriptのコーディングを殆どやったことないので、遭遇したことないだけかもしれませんが。

■個人的に分かりやすい書き方に修正

var Nightmare = require('nightmare');
var nightmare = Nightmare();

nightmare
  .goto('http://cnn.com')
  .evaluate(function () {return document.title;})
  .end()
  .then(function (result) {console.log(result);})
  .catch(function (error) {console.error('Search failed:', error);});

これなら分かりやすいですね。voってなんやねん。。