2016-09-13 6 views
2

私はにPhantomJS 2.1.1を使用しています。ノードまたはキャスパーなし。PhantomJSでリモートイメージを保存する

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

..実際には画像ではない1xxバイトのjpegファイルが作成されますが、 PhantomJSで任意の種類の(JPEG、JPG、PNG)ファイルをダウンロードする方法はありますか?その後、..

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

+0

はhttp://example.com/folder/someimage ' '与えられたURLに' /フォルダ/ 'をい.jpg 'にはすべての 'read/write /'パーミッションが設定されていますか? –

+0

@DavidRはいそうです。それはファイルが作成されているが実際にはイメージではない理由です。 – 3zzy

+0

このコードは、* content *: 'http://example.com/folder/someimage.jpg'でファイルを作成します。実際にイメージを読み込んだ後、ファイルに書き込む必要があります。 @ArtjomB。 –

答えて

1

これを行うための簡単な方法:

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); 

}); 
+0

ノードはありませんが、これはまだ動作しますか? – 3zzy

+0

これはネイティブのPhantomJSスクリプトであり、node.jsのものはありません。 – Vaviloff

+0

クールで、画像がビューポートより大きければどうなりますか?おそらくそうなるでしょう。ビューポートを最大の解像度に設定する必要がありますか?それがパフォーマンスに影響しますか? – 3zzy

1

は、私はこれをやってしまった

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

編集:唯一の欠点は、いくつかのウェブサイトは、wgetを検出し、(私が合格していても404を投げることですユーザーエージェント、リファラー)がリアルのユーザーではないのに対し、ファントムはそれを離れてしまいます。 PhantomJSは、それ自体で画像を保存するに

関連する問題