2

Drupal サイトの 2 つの Web ページからタイトル タグ テキストを取得しようとしています。ナイトメアを使いたい。

これまでの私のコードは次のとおりです。

// get the <title> text from inside the Drupal site
var Nightmare = require('nightmare');
var user = 'foobar@example.com';
var pass = 'foobar';

new Nightmare()
  .goto('http://example.com/user')
    .type('#edit-name', user)
    .type('#edit-pass', pass)
    .click('.searchsubmit')
    .wait()
    .evaluate(function () {
       return document.getElementsByTagName("TITLE")[0];
       }, function (res) {
      console.log('Homepage title: '+res.text);
    })
    .run(function(err, nightmare){
      console.log('Done1.');

      // step 2
      nightmare
        .goto('http://example.com/admin')
        .wait()
        .evaluate(function () {
          return document.getElementsByTagName("TITLE")[0];
          }, function (res) {
         console.log('Admin page title: '+res.text);
        })   
        .run(function(err, nightmare){
          console.log('Done2.');
        })
      ;
    })
 ;

node app.jsを使用してこれを実行すると、最初のページに正常にログインできます。残念ながら、2 番目のページを開こうとすると、2 番目のページ呼び出し ( http://example.com/admin ) でアクセスが拒否されます。セッションは 2 番目の「goto」コマンドに引き継がれません。

同じ nightmarejs セッションで多くのページを開くにはどうすればよいですか?

4

2 に答える 2

2

goto メソッドをチェーンしてみましたか?

 new Nightmare()
  .goto('http://example.com/user')
    .type('#edit-name', user)
    .type('#edit-pass', pass)
    .click('.searchsubmit')
    .wait()
    .evaluate(function () {
       return document.getElementsByTagName("TITLE")[0];
       }, function (res) {
      console.log('Homepage title: '+res.text);
    })
    .goto('http://example.com/admin')
        .wait()
        .evaluate(function () {
          return document.getElementsByTagName("TITLE")[0];
          }, function (res) {
         console.log('Admin page title: '+res.text);
        })   
        .run(function(err, nightmare){
          console.log('Done2.');
        })
      ;
    }).run();

api docs run を読むと、その前のコマンドのみが実行されます。

于 2014-11-04T07:55:27.007 に答える
1

いくつかのテストの後、goto() は 1 回だけ使用する必要があるように思われることがわかりました。新しいページに切り替えるには、追加の goto() の代わりに click() を使用します。

于 2014-11-04T14:33:16.603 に答える