2014-12-04 82 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

相关问题