2

我正在尝试从 Drupal 站点上的两个网页中提取标题标签文本。我想使用 Nightmarejs。

到目前为止,这是我的代码:

// 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我能够成功登录到第一页。不幸的是,当我尝试打开第二页时,我看到第二页调用 ( http://example.com/admin ) 拒绝访问。会话没有被带到第二个“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 文档run 只执行它之前的命令。

于 2014-11-04T07:55:27.007 回答
1

经过一些测试,我发现似乎 goto() 应该只使用一次。为了切换到新页面,我使用 click() 而不是额外的 goto()。

于 2014-11-04T14:33:16.603 回答