我正在为Firefox创建一个javascript扩展,我想在其中使用一个scraper页面,找到一个子页面并将该URL传递给扩展中的一个函数。刮刀是使用Cheerio构建的,我在本地机器上使用Node.js创建并测试了刮刀,但是我在扩展中实现它时遇到了麻烦。我知道最有可能的是,在浏览器中运行扩展程序,不会让您创建“请求”连接。
当我调用scrape函数时,它没有给出任何错误,相反,它根本没有返回(也没有控制台日志,所以它没有触发)。有谁知道如何从任何机器上的扩展程序调用此功能?有没有办法在扩展中包含Node js或类似的东西?代码如下!
function scrape(item) {
request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {
console.log("connected");
// create cheerio
var $ = cheerio.load(html);
$('.inner-article a').each(function (i, elem) {
if ($(this).children().length == 1) {
availableItems.push($(this).attr('href'));
}
});
availableItems.forEach(function (i) {
request(url + i, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
var title = $('#details').find('h1').text();
title = title.toLowerCase();
title = title.replace(/\s+/g, '');
var n = title.includes(item);
if (n) {
console.log('found');
itemurl = url + i + '';
return itemurl;
}
}
});
});
}
});
}
非常感谢!
答案 0 :(得分:0)
Google Chrome扩展程序中的请求略有不同。
首先,您必须在manifest.json
中包含您要抓取的域名。
"name": "Extension Name",
"permissions": [
"http://www.example.com/"
]
您还必须使用XMLHttpRequest
执行XHR请求,以获取所需的数据,并等待刮取数据所需的正确状态更改。你可以在这里阅读更多相关内容: