NightmareJS Scripts永远不会回来?

时间:2017-04-06 22:03:33

标签: javascript node.js nightmare

考虑以下NightmareJS脚本......

var Nightmare = require('nightmare');

var yandex = new Nightmare()
    .viewport(1000,1000)
    .useragent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36")
    .goto('https://yandex.com/')
    .run(function(err, nightmare) {
        if(err) {
            console.log(err);
        }
    });

它只是挂起,永远不会让我回到提示符。执行操作。我可以截取屏幕截图并执行其他操作,但节点进程永远不会结束。

1 个答案:

答案 0 :(得分:1)

如果你像这样使用梦魇,你会遇到麻烦。使用Nightmare.js时,Async / await解决了许多问题

async function test(url){
  try{
    const nightmare = Nightmare({show:true})
    await nightmare.useragent(userAgentOption)
    const response = await nightmare.goto(url)
    await nightmare.wait(2000)
    const evaluated = await nightmare.evaluate(()=>{
       return document.querySelector("input").innerHTML
    })  
  }catch(err){
    throw new Error(err)    
  }  
}

您可以在每个步骤后登录该功能,以查看它失败的位置。

更好的选择是使用WebStorm,因为它可以很好地调试Nightmare.js

iron-node 等调试解决方案基于电子,他们不会使用Nightmare.js代码

现在你可以调用这样的代码:

test("https://yandex.com").then(console.log).catch(console.log)