3

github.com/segmentio/nightmareで 2 つのサイトを自動化しようとしています。

例:

  1. site_1 (一時的なメール サービス)にアクセスして、メールを受信したい。
  2. 次に、site_2にアクセスしてそのメールに入力し、フォームを送信します。
  3. 次に、site_1に移動し、メールが到着したかどうかを確認します
  4. アクティベーション リンクの電子メール メッセージを解析する
  5. 次に、そのリンクをクリックして、もう一度site_2に移動します。

…………など

Nightmare js と node.js は、この種のブラウザー操作に適していますか?

公式 API のような単純なことには問題ないからです。

var Nightmare = require('nightmare');
new Nightmare()
.goto('http://yahoo.com')
.type('input[title="Search"]', 'github nightmare')
.click('.searchsubmit')
.run(function (err, nightmare) {
  if (err) return console.log(err);
  console.log('Done!');
});

複雑なものはどうですか? ありがとうございました

4

2 に答える 2

2

Nightmare は PhantomJS の代わりに Electron を使用するようになり、API は以前のものとは異なります。ドキュメンテーションは、ジェネレーターでの使用方法のみを示しています。ジェネレーターを使用せずに、代わりにプロミスを使用して、あなたが望むことを行う方法を次に示します。完了したら、これらの 3 つのコマンドを使用して electron ブラウザーを強制終了できます。

また、DOM 操作の各ステップを (制御された再帰を使用して) 検証し、操作の間に十分な待機時間を確保してください。そうしないと、常に期待どおりの結果が得られるとは限りません。

var Nightmare   = require('nightmare'),
    Promise     = require('q').Promise;

var nightmare = new Nightmare({show: true});

function goToSite1(data){
    Promise.resolve(nightmare
        .goto('http://stackoverflow.com/questions/32518777/nightmare-js-browsing-and-parsing-multiple-sites')
        .evaluate(function(){
            return $('#question-header > h1 > a').text();
        })).then(function(html){
            goToSite2(html);
        });
}

function goToSite2(data){
    Promise.resolve(nightmare
        .goto('https://github.com/segmentio/nightmare')
    ).then(function(){
        nightmare.proc.disconnect();
        nightmare.proc.kill();
        nightmare.ended = true;
        doOtherStuff(data);
    })
}

function doOtherStuff(data){
    console.log(data)
}

goToSite1();
于 2015-10-24T11:50:32.033 に答える