我的标题几乎描述了它。我在网上搜索过我不能接近我想要的东西。
我的代码:
const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: true })
var url = '';
nightmare
.goto('https://duckduckgo.com')
.type('#search_form_input_homepage', 'github nightmare')
.click('#search_button_homepage')
.wait('#r1-0 a.result__a')
.evaluate(() => document.querySelector('#r1-0 a.result__a').href)
.end()
.then(function(result){
url = result;
})
.catch(error => {
console.error('Search failed:', error)
})
//this will throw empty
console.log(url);
//basically i need a loop that can check if url has either changed values or isnt empty but only until it is not empty!
url.change(function(){
console.log(url);
})
所以我主要在代码中描述它。
如果你可以帮助我会喜欢这个,你真的不需要在噩梦中有一个基本的理解,然后它是一个无头的铬npm,它基本上是幻影.js simplfied
答案 0 :(得分:1)
为什么不简单地使用您已经拥有的.then
?
.then(function(result){
// Instead of this:
// url = result;
// Do this:
console.log(result);
})
答案 1 :(得分:1)
也许这个帖子可以帮到你:
Basicall,你必须写一个动作:
Nightmare.action('deferredWait', function(done) {
var attempt = 0;
var self = this;
function doEval() {
self.evaluate_now(function(selector) {
return (document.querySelector(selector) !== null);
}, function(result) {
if (result) {
done(null, true);
} else {
attempt++;
if (attempt < 10) {
setTimeout(doEval, 2000); //This seems iffy.
} else {
done(null, false);
}
}
}, '#elem');
};
doEval();
return this;
});
现在你可以使用它了
var nightmare = Nightmare();
nightmare.goto('http://example.com')
.deferredWait()
.then(function(result) {
console.log(result);
});