我试图从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)。会议没有进入第二个&#34; goto&#34;命令。
如果能够使用相同的nightmarejs会话打开许多页面,我该怎么办?
答案 0 :(得分: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运行只执行之前的命令。
答案 1 :(得分:1)
经过一些测试,我发现goto()似乎只能使用一次。为了切换到新页面,我使用click()而不是额外的goto()。