2013-05-29 44 views
1

我試圖提取經過身份驗證的網站的內容。獲取標籤的內容並將其寫入文件

我試圖通過使用最新的Firefox附加SDK來做到這一點的擴展。

到現在我學會了如何打開一個標籤。

var Widget = require("widget").Widget; 
var tabs = require('tabs'); 
exports.main = function() { 
    new Widget({ 
     label: "My Mozilla Widget", 
     contentURL: "http://www.mozilla.org/favicon.ico", 

     onClick: function(event) { 
      tabs.open("google.com") 
      } 
     }); 
}; 

我想取剛剛打開的選項卡的內容並將其保存到本地文件。謝謝。

+0

爲什麼你需要在選項卡首先打開呢?你不能只是[請求](https://addons.mozilla.org/en-US/developers/docs/sdk/1.14/modules/sdk/request.html)這個頁面,而不是加載到一個標籤中? –

+0

@MattiasBuelens我有一個頁面可以在幾秒鐘後加載內容。當我嘗試使用「請求」時,它會在0時給出頁面。顯示「內容加載」。我希望頁面獲取數據,這些數據會在一段時間後出現。有沒有辦法做到這一點使用「請求」?謝謝 –

+0

不,'request'不會執行腳本,因此無論加載頁面的內容都不在請求的響應中。 –

回答

0

您必須附加內容腳本才能在完成加載時獲取頁面的DOM HTML。

我不確定你認爲該頁面被完全加載,因爲「內容加載」聽起來像一個AJAX請求加載頁面的部分。我假設不知何故,當頁面加載時,你可以在頁面的上下文中觸發一個函數pageLoaded。你可以觸發功能,以不同的方式:偵聽DOM的變化,監測AJAX請求,...

無論哪種方式,你可以再附加內容腳本的頁面:

const { data } = require('sdk/self'); 
// snip 
let tab = tabs.open('google.com'); 
tab.on('ready', function(tab) { 
    let worker = tab.attach({ 
     contentScriptFile: data.url('post-page-content.js') 
    }); 
    worker.port.on('page-content', function(content) { 
     console.log(content); 
     // Save to a file using sdk/io/file or something 
    }); 
}); 

你的內容腳本post-page-content.js應該將消息發送到你的附加組件與頁面的內容腳本在頁面完全加載:

function pageLoaded() { 
    self.port.emit('page-content', document.documentElement.outerHTML); 
} 
// TODO Attach pageLoaded as an event listener to something 
相關問題