使用PhantomJS保存远程图像

时间:2016-09-13 05:55:24

标签: javascript webkit phantomjs

我在没有 Node或Casper的Ubuntu 上使用PhantomJS 2.1.1。

fs.write('images/products/image.jpg', 'http://example.com/folder/someimage.jpg', 'w');

..虽然这会创建不是真正图像的1xx字节jpeg文件。有没有办法用PhantomJS下载任何类型的(JPEG,JPG,PNG)文件?

2 个答案:

答案 0 :(得分:1)

我最终这样做了:

$stdout = shell_exec("phantomjs ./scrape-images.js '".$url);
$images = isset($stdout) ? explode(',', $stdout) : '';

..然后:

$command = 'wget '.urlencode($image).' --output-document="/path/to/image/directory/'.$filename.'" --quiet --background >/dev/null 2>&1';
shell_exec($command);

编辑:唯一的缺点是有些网站会检测到wget并抛出404(即使我通过了一个使用者和参考者)因为它不是真正的用户,而Phantom将会离开它。

答案 1 :(得分:1)

一种更简单的方法,PhantomJS自行保存图像:

var page = require('webpage').create();

page.viewportSize = { width: 1280, height: 800 };
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36';

var url = "http://stackoverflow.com";
var selector = "#hlogo a";

page.open(url, function(){

    setTimeout(function(){

        var clipRect = page.evaluate(function (selector) { 
            return document.querySelector(selector).getBoundingClientRect(); 
        }, selector);

        page.clipRect = {
            top:    clipRect.top,
            left:   clipRect.left,
            width:  clipRect.width,
            height: clipRect.height
        };

        page.render('image.jpg');

        phantom.exit();

    }, 1000);

});