0

2 つをブリッジするために使用しているモジュールとして Phantom-Proxy を使用して、Node.js 内から PhantomJS のビューポートを設定できないように見える問題があります。

Web ページのスクリーン グラブを取得することに成功しましたが、上で述べたように、ビューポート サイズを設定することはできません。

Phantom-Proxyのドキュメントでは、viewport プロパティを次のように設定する必要があると書かれています。

//set viewport size for browser window
proxy.page.set('viewportSize',
{ width:320, height:480 }, function (result) {
    console.log(result.toString().cyan);
    worldCallback.call(self);
});

したがって、私のコードでは、実際にスクリーングラブを取得する行の上にビューポートを設定しようとしました:

module.exports = function (app, phantom) {
  app.get('/url/:url/:width?/:height?', function (req, res) {
    phantom.create({"debug": true}, function (proxy) {
      var page = proxy.page;

      page.set('viewportSize', { width: 320, height: 480 }, function (result) {
        console.log(result);
      });

      page.open(req.params.url, function () {
        page.waitForSelector('body', function () {
          page.renderBase64('PNG', function (img) {
              res.set('Content-Type', 'image/png');
              res.end(new Buffer(img, 'base64'), 'binary');
          });
        });
      });
    }); 
  });
};

これがうまくいくとは思わなかったので、page.openinsidepage.setの callback を入れてみましたが無視され、page.setinsidepage.openの callbackを入れてからその中に入れてみpage.waitForSelectorました。

ただし、ビューポートはまだ無視されているようです!

これでどんな助けでも大歓迎です!皆さん、ありがとうございました

4

1 に答える 1

0

それはずっと働いていたことが判明しました。

基本的に、ビューポートが正しく設定されていても、Web ページが必ずしもビューポートの幅と高さになるわけではありません (たとえば、ボディにwidthofが含まれている場合を除きます100%)。

Web ページはビューポート内でスクロールするため、ページ全体が引き続きレンダリングされます。

于 2013-05-29T13:40:10.810 に答える