噩梦Js评估页面

Nightmare Js evaluate page

本文关键字:评估 Js 噩梦      更新时间:2023-09-26

I使用Nightmare.js:运行以下代码

var test = 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://en.wikipedia.org/wiki/Ubuntu')
   .inject('js', 'jquery.js')
   .wait(500)
   .screenshot('page.png')
   .evaluate(
         function () 
         {
          return  $('h1.firstHeading').text(); //Get Heading
         },
         function (value) 
         {
          console.log("Not in page context");
         }
      )
   .run(
        function (err, nightmare) 
            {
                if (err) return console.log(err);
                console.log('Done!');
            }
       );

页面已加载,屏幕截图page.png已正确拍摄,但是evaluate回调从未被执行,因为消息"Not in page context"从未被打印出来。jquery.js和脚本在同一个文件夹中,它被成功地注入,因为如果我删除injectJS I获取一个错误,指示未定义$。我想获取文本内容h1.第一个航向选择器的。

为什么未执行评估回调。

主要问题在于console.logevaluate()中不起作用。

evaluate只负责返回回调中的数据。

目前,评估函数采用.evaluate(fn, args1, args2)格式。因此,在您的情况下,虽然第一个函数会返回数据,但下一个函数不会。

如果你只想要标题,只需返回函数中的值,并在run函数中执行console.log(梦魇)。

请在下面找到示例代码更改:

.evaluate(
    function () 
    {
        if($('h1.firstHeading').text())
            return  $('h1.firstHeading').text(); //Get Heading
        else
            return "Not in page context";
    }
)
.run(
    function (err, nightmare) 
    {
        if (err) return console.log(err);
        console.log(nightmare);
        console.log('Done!');
    }
);

希望这能有所帮助。!感谢