检查元素是否存在于 fetched URL

Check if element exists in fetched URL

我有一个包含 30 个 URL 的页面,我需要单击每个 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 and this,但我不确定这是否可行。

这可以用 Javascript/jQuery 完成吗?

我只是求方向,我自己来做。

非常感谢

我建议您使用 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 问题。

我创建了一个简单的项目来展示如何实施这种方法。 您可以在某些本地网络服务器(apache、iis 等)here 和 运行 上下载它