20170913 nwjs的bg-script的坑

最近在用nwjs来做爬虫,去爬某分类信息平台的帖子,看看什么人发了什么贴。
而nwjs的定位来说,是用来做桌面APP的,作为一名前端,nwjs是非常好用的。
但是当我要通过nwjs控制网页进行模拟点击的时候,发现了不少的蛋疼问题。

nwjs的上下文结构

nwjs中的作用域非常多,简直绝望,有什么node Contexts,又有什么Browser Context。反正我是看不懂的了,按我理解,就是有nwjs作为app的Contexts,还有其网页窗口的Contexts。一般来说,在用nwjs的开发桌面app的时候,app的Contexts和网页窗口的Contexts是一样的,因为你的package.json会这么写。

    {
      "name": "TaskerNotification",
      "main": "index.html",
      "nodejs": "true"
    }   

所以你的JS也是在index.html里面执行,而index.html是在网页窗口下跑的,所以这就是网页窗口的Contexts了。但是,这个时候只要页面跳转,你的js代码就要重新加载了。这就是为什么通过这个我无法做出爬虫来。

nwjs的bg-script

bg-scirpt,就是让你的js在nwjs的APP的Contexts上运行,就算网页窗口被刷新几次跳转几次,你的js都不会被刷新,依旧还是当前执行着的状态。

    {
      "name": "FaTie58",
      "chromium-args": "--mixed-context",
      "main": "index.html",
      "bg-script": "main.js",
      "nodejs": "true"
    }
bg-script中的控制台(F12爸爸)

当你的js在bg-script中跑的时候,你会发现,仿佛一切都用不了。你的console.log,发现没有输出。仿佛一切都在后台运行,你慌张地尝试了setTimeout和alert,果然是在后台运行啊。但是什么location.href的东西,都用不了了。为啥,因为你现在在APP的Contexts里,而你玩的location之类的东西,都是基于网页窗口下的window对象。
令我慌张的是,这个后台运行的js去没有控制台可以调出,天啊,我到底代码在所谓的后台中跑了个啥。
在伟大的同性交友平台上(github),终于找到解决方案。
这个后台的控制台你要这样调出。
在你那个bg-script的js中加入下面这些内容在最顶头,为什么要在最顶头,因为这段代码要先跑你才能看到你的**代码的运行效果啊兄弟。

    chrome.developerPrivate.openDevTools({
        renderViewId: -1,
        renderProcessId: -1,
        extensionId: chrome.runtime.id
    });
bg-script中的错误处理

有了控制台之后感觉整个世界舒服多了,然后你又会发现问题,就是你的代码一运行就爆炸了,对的,你的nwjs进程就突然崩溃了,你毫无办法,你在你的几万行代码中找错误实在是要了你的命了,明明我在浏览器上跑还是好好的啊。。。
这个时候你要记得在你那个bg-script的js中加入下面这些内容在最顶头。

    process.on('uncaughtException', (err) => {
      console.error(err)
    });

这段代码就是让你在控制台中输出错误,这下,你的nwjs终于不崩溃了,终于能够输出错误了。

bg-script中控制新窗口

在我的代码中,基于 “main”: “index.html” 而出现的窗口没有办法在bg-script中控制。不过反正我做爬虫,新窗口也可以的。
通过下面代码可以打开新窗口。

    nw.Window.open("http://gz.58.com", {}, function (_window)
    {

    });

请注意第三个参数,对的,他是个回调函数!!!这个回调函数自己有个参数,我叫他“_window”。这个“_window”就是新窗口的对象,通过“_window.window”,就可以对新窗口的网页中的dom等进行操作,想拿什么是什么,因此作为爬虫也就完全ok了。。

至于爬虫拿到的数据要怎么保存,那就不在这里说,自己找找什么nwjs的文件操作或者nodejs的文件操作即可。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值