2

以下を使用して、PhantomJS でスクリーンショットを任意にトリミングできることを知っていpage.clipRect()ます。

            page.clipRect = { 
                top: element_top, 
                left: element_left, 
                width: element_width, 
                height: element_height 
            };

そのため、jQuery を使用して特定の要素の位置と幅/高さを取得しようとしています。ただし、以下のコード (PhantomJS rasterize.js の例の最後のセクションに基づく) は機能しません。デフォルト値を保持するだけです。

変数のスコープに関して何か間違ったことをしたに違いないと思っています。どうすればこれを機能させることができますか?

page.open(address, function (status) {
    if (status !== 'success') {
        console.log('Unable to load the address!');
    } else {

        var element_top = 0;
        var element_left = 0;           
        var element_width = 200;
        var element_height = 200;

        page.evaluate(function() { 
                var $element = $('h1');
                var offset = $element.offset();
                element_top = offset.top;
                element_left = offset.left;
                element_width = $element.width();
                element_height = $element.height();     
        });

        window.setTimeout(function () {
            page.clipRect = { 
                top: element_top, 
                left: element_left, 
                width: element_width, 
                height: element_height 
            };

            page.render(output);
            phantom.exit();
        }, 200);
    }
});
4

1 に答える 1

1

内部で実行するものpage.evaluateはすべて、外部からは利用できません。実行はサンドボックス化され、ページ コンテキストに限定されます。利用できるようにするには、戻り値にしてからアクセスできるようにします。

pizza.jsピッツェリアのリストが呼び出し元に返される場所に含まれている PhantomJS を見てください。

于 2012-08-21T02:42:10.230 に答える