我有一个页面,例如30个URL,我需要点击每个页面并检查一个元素是否存在。 目前,这意味着:
$('area').each(function(){
$(this).attr('target','_blank');
var _href = $(this).attr("href");
var appID = (window.location.href).split('?')[1];
$(this).attr("href", _href + '?' + appID);
$(this).trigger('click');
});
这会打开30个新标签,我会手动浏览它们。
(所有网址都在同一个域中)
如果爬虫具有以下逻辑,那将是非常好的:
$('area').each(function(){
1) get the HREF
2) follow it
3) on that new page:
if($('.element')){
push the $('area') into array1
} else {
push the $('area') into array2
}
});
4) Display array1 in green
Display array2 in red
基本上,我想生成一份报告:
X抓取的网页 元素Y
Z抓取的网页没有元素Y
我显然坚持让Javascript / jQuery在新打开的标签中工作。
我找到了this,this和this,但我不完全确定这是否可行。
这可以用Javascript / jQuery完成吗?
我只是要求正确的方向,我自己会做这些步骤。
非常感谢
答案 0 :(得分:1)
我建议你使用iframe
来加载页面。
例如:
$.each($your-links, function(index, link) {
var href = $(link).attr("href");
// your link preprocess logic ...
var $iframe = $("<iframe />").appendTo($("body"));
$iframe.attr("src", href).on("load", function() {
var $bodyContent = $iframe.contents().find("body");
// check iframe content and remove iframe
$iframe.remove();
}
}
但是,我应该说,如果您的抓取工具和已检查的网页有不同的网域,则会出现CORS问题。
我创建了一个简单的项目,展示了如何实现这种方法。 您可以下载here并在某个本地Web服务器(apache,iis等)上运行。