使用casperjs下载资源图像文件

我阅读文件,看起来像你需要slimerjs http://docs.casperjs.org/en/latest/events-filters.html为了从page.resource.received事件获取responseData.body

我的用例是当页面加载的时候下载图片,所以我不做另外一个往返:获取资源JSON,下载并保存任何图像文件,重新加载文件检查图像尺寸,如果太小(图标) – >消除。

我想知道是否有更好的方法来做到这一点。 我其实可以去evaluate imgselect器,但一些网站使用background-url css,这是棘手的。

评估可能会很棘手,但这里有一个可能的方法:( 仅限PhantomJS

有了这个例子theres的可能性

  1. 将与这些元素的后面page.render()的特定标准匹配的图像的clipRects存储到屏幕截图文件中。

  2. 存储用于后期下载请求的匹配资源的URL

  3. 捕获“src”属性或“background-image”css属性中的url,同时尝试获取标准匹配和捕获目的的宽度和高度。

 var page = require('webpage').create(); page.onConsoleMessage = function(msg) {console.log(msg);}; console.log('[#] IMAGE · NINJ A'); page.open('http://cartawifi.com', function(status) { var clipRectList = page.evaluate(function(pagex) { // .: Captured Images : In-Memory Reference Storage :. const IMAGES = { 'src':{'indxs':[],'ref':[]}, 'background-image':{'indxs':[],'ref':[]}, 'selectors':[] }; var clipRects = []; // maybe you want to take page screenshots of specific elements containing matching images var capturedImages = 0; var totalElements = 0; // .: Define Image Capture : Min/Max Width/Height :. const minWidth = 1; const minHeight = 1; const maxWidth = 9999; const maxHeight = 9999; const regxp = new RegExp('url'); $('*').each(function(index, el) { var ignore=false; // search for elements with 'background-image' css property if($(el).css('background-image')!=null!=null){ var wu = $(this).css('width'); var width = parseFloat(wu.replace('px','')); var hu = $(this).css('height'); var height = parseFloat(wu.replace('px','')); var src = $(el).css('background-image'); var group = "background-image" if(!src.match(regxp)){ignore=true;}else{ //remove the keep the contents inside the 'url()' string' src = (($(el).css('background-image')).slice(4)); src = src.substring(0, src.length - 1); } } // search for elements with 'src' html attribute else if($(el).attr('src')!=null){ var width = $(this).get(0).naturalWidth; var height = $(this).get(0).naturalHeight; var group = "src" var src = $(el).attr('src'); } //--------------------------------------------------------- if(width>=minWidth&&height>=minWidth&& width<=maxWidth&&height<=maxWidth&& !ignore){ IMAGES[group].indxs.push(index); IMAGES[group].ref.push(src); IMAGES.selectors.push(this); capturedImages++; console.log(" [captured] :",group,width,height,src); //:store clipRect for this element var clipR = $.extend({},$(el).offset(),{width: $(el).offsetWidth,height: $(el).offsetHeight}); console.log(" (clipRect)",JSON.stringify(clipR)); clipRects.push(clipR); } totalElements++; }); // report information : console.log('[i] Total Elements Parsed : ',totalElements); console.log('[*] Total Images Captured : ',capturedImages); console.log(' > [src] : ',IMAGES['src'].indxs.length); console.log(' > [background-image] : ',IMAGES['background-image'].indxs.length); }); console.log('[!] TO-DO : STORE CAPTURED IMAGES AS FILES'); phantom.exit(); });