考虑以下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);
        }
    });

它只是挂起,从不让我返回提示。 Action 被执行。我可以截屏并做其他事情,但是 Node 进程永无止境。

最佳答案

如果您像这样使用 Nightmare ,将会遇到麻烦。使用Nightmare.js时,异步/等待解决了许多问题

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 这样的调试解决方案都是基于 Electron 的,因此它们不适用于Nightmare.js代码

现在您可以像这样调用代码:
test("https://yandex.com").then(console.log).catch(console.log)

关于javascript - NightmareJS脚本永不返回?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43266502/

10-09 17:38