javascript - Nightmare Js 评估页面

标签 javascript nightmare

我使用 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 已正确截取,但 评估回调永远不会被执行,因为消息“不在页面上下文中”永远不会被打印。 jquery.js 与脚本位于同一文件夹中,并且成功注入(inject),因为如果我删除 injectJS 我 收到一个错误,指出 $ 未定义。我想获取文字内容 h1.firstHeading 选择器。

为什么没有执行评估回调。

最佳答案

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

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

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

如果您只想要标题,只需从函数返回值并在运行函数中执行 console.log(nightmare)。

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

.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!');
    }
);

希望这对您有所帮助! 谢谢

关于javascript - Nightmare Js 评估页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33659483/

相关文章:

c# - 验证摘要应显示在警告消息框中?

javascript - 按日期javascript对JSON数据进行排序

javascript - NightmareJS 从字符串创建页面

javascript - meteor 的 Nightmare 引发异常

javascript - 使用部分值/正则表达式进行切换?

javascript - Excelljs - 如何从流创建工作表

javascript - 对元素/输入执行 "enter"

javascript - Mocha 梦魇 : Uncaught TypeError: Cannot read property 'apply' of undefined

node.js - Nightmare 般的网上抓取如何实际处理表格并提交

javascript - Firefox 点击和 chrome 点击有什么区别?