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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章