20170913 nwjs的bg-script的坑

原创 2017年09月13日 19:54:28

最近在用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的文件操作即可。

20170913 nwjs的bg-script的坑

最近在用nwjs来做爬虫,去爬某分类信息平台的帖子,看看什么人发了什么贴。 而nwjs的定位来说,是用来做桌面APP的,作为一名前端,nwjs是非常好用的。 但是当我要通过nwjs控制网页进行模拟...
  • cxwithyxy
  • cxwithyxy
  • 2017年09月13日 19:54
  • 255

NW.js入门

下载官方sdk https://nwjs.io/ 解压sdk; 在根目录新建文件夹,myapp, 在myapp中新建index.html shellDemo ...
  • mxj588love
  • mxj588love
  • 2017年12月29日 15:46
  • 40

nw.js 填坑

nw.js官方文档英文版,中文版中文文档部分内容不全面,gitbook那份写得很乱,请不要入坑。 nw.js github地址,遇到问题慢慢的时候看官方文档和github上的Issues和Pull r...
  • qq_21544879
  • qq_21544879
  • 2016年11月22日 22:33
  • 3132

Nodewebkit debug调试模式

1、进入官网http://nwjs.io/2、下载SDK版本的NW.js3、运行项目4、按F12打开调试窗口,效果如图【转载请注明出处:http://blog.csdn.net/leytton/art...
  • Leytton
  • Leytton
  • 2016年08月17日 13:24
  • 2866

遗传算法和神经网络实现chrome的小恐龙游戏(Flappy TRex)的人工智能

用神经网络来做个能自己玩chrome断线时的那个小恐龙的人工智能
  • cxwithyxy
  • cxwithyxy
  • 2017年11月29日 14:52
  • 747

20150107 Eclipse安装了CDT后还是不能编写C和C++

我的eclipse是从另一台电脑复制过来的  然后发现创建文件的时候没有C/C++这个选项 , 倒是java和android还有. 再看看 , 已经安装了CDT了 , 但是为什么还是不能编写C/C...
  • cxwithyxy
  • cxwithyxy
  • 2015年01月07日 01:13
  • 702

nw.js node-webkit系列(21)在应用中如何数据持久化

在本地应用中数据持久化是很常见的,人们常使用嵌入外部数据库或写入txt文本的方式来保存数据。然而,在node-webkit有更好的选择,你可以独立使用Web SQL Database, embedde...
  • zeping891103
  • zeping891103
  • 2016年04月07日 15:08
  • 3291

20170913

人总是不甘堕落,却又止步不前。
  • qq_40225075
  • qq_40225075
  • 2017年09月13日 14:25
  • 45

20130716 阅后即毁(新浪app)

在考试这几天做了一个新浪的app..名字叫"阅后即毁"..阅后即毁是和阅后即焚同义的主要说的是一条信息被看了一次就会自动删除.感觉有点鸡肋吧我也觉得有点用户的需求有多少这个就不清楚了目前使用我这个应用...
  • cxwithyxy
  • cxwithyxy
  • 2013年07月18日 16:36
  • 660

20170409 关于微信电脑版多开

微信电脑版多开,摆脱拼命摁回车的多开方式。做个有情怀的人,用机智的bat脚本来多开微信电脑版。...
  • cxwithyxy
  • cxwithyxy
  • 2017年04月09日 01:19
  • 1024
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:20170913 nwjs的bg-script的坑
举报原因:
原因补充:

(最多只允许输入30个字)