1

nightmarejs を使用して、ページ スクリプトによって呼び出されるいくつかのリダイレクトと自動フォーム送信を追跡したいと思います。そして、最後のページを取得したい。

たとえば、次のhttp://myexample/ようなページ コンテンツ:

<html><body>
<form action="http://somewhere/" method="post">
  <!-- some params -->
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$('form').submit();
</script>
</body></html>

このページのスクリプト要素がフォームを送信します。そして、への投稿リクエストhttp://somewhere/が送信されます。そして、http://somewhere/に 302 レスポンスを返しますhttp://another/

最後のページ ( http://another/) を取得するために、次のような nightmarejs コードを試しました。

var Nightmare = require('nightmare');
new Nightmare()
    .goto('http://myexample/')
    .wait(1000)
    .url(function(url) {
        console.log(url);
    })
    .evaluate(function () {
        return window.location.href;
    }, function (res) {
        console.log(res);
    })
    .run();

メソッドを試しましたがurlevaluate最後のページを取得できませんでした。

このようなケースをサポートする方法はありますか? casperjs または phantomjs を使用した回答も大歓迎です。

アップデート

PhanomJS を試してみたところ、リダイレクトをたどることができました。しかし、エラーで接続に失敗するという別の問題がありSSL Handshake failedました。これを解決して--ssl-protocol=anyオプションを追加しました。

4

2 に答える 2

2

.wait(fn[, arg1, arg2,...]) メソッドを使用して、リダイレクトをたどることができます。

var loginUrl = '...';
var loggedInUrl = '...';
new Nightmare().goto(loginUrl)
  .type('#username', '')
  .type('#password', '')
  .click('#loginBtn')
  .wait(function () {
    return window.location.href === loggedInUrl;
  });

または、宛先 URL に固有の DOM 要素がある場合は、.wait(selector) メソッドを使用できます。こちらのドキュメントをご覧ください: https://github.com/segmentio/nightmare

于 2016-11-16T05:20:27.887 に答える
0

API で説明されているイベントを使用して、リダイレクトがいつ発生したかを確認できます。イベントを使用すると、使用urlchangedできる新しい URL が取得されます。

https://github.com/segmentio/nightmare#onevent-callback

于 2015-05-06T17:16:29.400 に答える