2014-12-04 130 views
1

我做了一個擴展程序,它將跟蹤一個人在漫畫網站上閱讀的漫畫,並列出他們上次在其收藏夾頁面上閱讀的章節。而且我最近提出了一個有用的功能來使擴展更好一點。我想讓用戶選擇只能追蹤他們在網站上收藏的漫畫。因此,當他們閱讀時,擴展名會在後臺不斷檢查,如果它在他們的收藏夾中,那麼保存它,否則不保存。Chrome擴展程序 - 從背景中的網站的單獨頁面獲取HTML

該網站有一個收藏夾頁面,其中包含一個人收藏的所有漫畫列表。我希望能夠在用戶隱藏的背景中不斷獲取該頁面上列出的每個漫畫的名稱。

所以我的問題是,有沒有辦法在後臺抓取特定頁面的html,並不斷抓取特定數據,如某些元素的文本保存到數組中,而用戶不必實際上在收藏夾頁面?

編輯: 解決方案

var barray = []; 
function getbm(callback) { 
    var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function(data) { 
     if (xhr.readyState == 4) { 
      if (xhr.status == 200) { 
       var data = xhr.responseText; 
       callback(data); 
      } else { 
       callback(null); 
      } 
     } 
    } 
    var url = 'http://mangafox.me/bookmark/index.php?status=all'; 
    xhr.open('GET', url, true); 
    xhr.send(); 
}; 
function res(data) { 
    var parsed = $.parseHTML(data); 
    parsed = $('<div />').append(parsed); 
    parsed.find('h2.title').each(function(){ 
     var bmanga = $(this).children('a.title').text(); 
     barray.push({"manga": bmanga}); 
    }); 
    chrome.storage.local.set({'bData': barray}) 
}; 
getbm(res); 

回答

0

這在很大程度上取決於如何在問題頁面構造。

如果頁面是靜態的(HTTP響應包含您需要的數據),那麼通過XMLHttpRequest來刮取頁面是一條路。

如果頁面是動態的(最初沒有數據,並且頁面上的JavaScript會查詢服務器來填充它),那麼XHR路由將不起作用。您可以嘗試觀察該頁面發出的網絡請求並複製它們。

注意:雖然不太可能,但檢查該網站是否有公共API。這將爲您節省逆向工程的工作量,並讓您避免自動抓取數據的灰色地帶。


此外,請參閱如果您可以通過某種方式檢查您正在跟蹤的頁面是否收藏該項目。這將比刮另一頁更容易。

+0

謝謝,它的工作!但是,在記錄我收到的數據後,它似乎將整個html代碼記錄爲一個巨大的字符串。我如何讓它可搜索?例如,使用以下代碼搜索它'var manga = $('h2.title')。children('a.title')。text();' – Vemon 2014-12-04 14:13:05

+0

http://stackoverflow.com/questions/20196442/parse- xmlhttprequest-responsetext-with-jquery – Xan 2014-12-04 14:22:05

+0

非常感謝,它的工作! :) – Vemon 2014-12-04 15:14:09

相關問題