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

相关文章推荐

20170914 nwjs实现模拟图片上传

模拟图片上传,就是非人为操作地进行图片上传,比如某网站需要上传头像,这时候能够自动在你某盘中读取文件并丢到那个input[type=file]的dom里面,然后触发上传。 // 搞到input的...

20170914 js模拟事件,什么click()都是伪模拟

百度看了一堆模拟点击事件的操作,大多数都是这样 $("#some_button")[0].click()我提醒一下我自己,这不是模拟点击事件,这不是模拟事件。 这是 调用点击函数!!!!什么才...

nodejs、nwjs、git的安装

刚进公司第二天,经理让我将git、nodejs、nwjs前端开发环境装起来,当时我是拒绝的,这些前卫的软件我在学校期间听都没听过。我抱着试试看的态度一边学习,一边搭建。到目前来讲还不知道是否搭建成功,...

nwjs学习笔记--01

PHPer一枚,学习NW是公司新项目初期的时候,员工自主学习……限时三天。三天学到的全部内容,全都是很浅显的。而且没能用上…… windows环境下使用nwjs,在菜鸟网看了两天的node.js教程...

nwjs 0.19打包exe

首先0.12以后版本原因打包方式依赖内容都不同了。 这里我找到一个最简单快捷的方式 打包工具 Inno Setup 图标更改工具ResHacker(这里下载angusj.com) 1...

nwjs 读取串口数据(防中文乱码)

  • 2016年04月13日 15:26
  • 168KB
  • 下载

NW.js nwjs-sdk-v0.26.6-win-x64

  • 2017年11月22日 23:52
  • 89.44MB
  • 下载

Nwjs从入门到精通 菜鸟实践笔记【1】

最近公司有想使用Nw来开发浏览器的想法,自己一直学的PHP,在网上并没有找到太多的相关资料,所以,就自己摸索着撸一条自学笔记; 当然呢,这里记录的都是我自己学习中遇到的问题,以及收获,希望通过自己的...

nwjs-v0.20.2-win-ia32

  • 2017年05月23日 11:46
  • 48.19MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:20170913 nwjs的bg-script的坑
举报原因:
原因补充:

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