2016-09-07 2 views
2

Чтобы PhantomJS создавал скриншоты страницы с разными ширинами видового экрана, я бы хотел настроить ее динамически. Это не работает, хотя:Динамически изменить viewportSize в PhantomJS

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

page.viewportSize = { width: 800, height: 600 }; 

page.open('http://example.com', function (status) { 

    page.render('medium.png'); 

    page.viewportSize = { width: 630, height: 420 }; 

    page.render('small.png'); 

    phantom.exit(); 
}); 

При запуске с phantomjs script.js это дает два идентичных PNG файлы medium.png и small.png при ширине 800px каждого. Ожидаемое поведение должно было иметь medium.png вот так и small.png шириной 630 пикселей. Как это можно достичь?

PS: This answer к подобному вопросу производит ошибку для меня. Также the accepted answer на этот вопрос предлагает довольно уродливое обходное решение, которого я бы хотел избежать.

+0

Я не могу воспроизвести проблему. Размер изменен для меня в Windows с помощью PhantomJS 2.1.1. –

+0

Я на Ubuntu с PhantomJS версии 1.9.?. Я попытаюсь обновиться. Спасибо за ваш комментарий! – hielsnoppe

ответ

3

Я думаю, что это должно быть возможно установить размер окна просмотра и откройте страницу снова, как это:

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

page.viewportSize = { width: 800, height: 600 }; 

page.open('http://example.com', function (status) { 

    page.render('medium.png'); 


    page.viewportSize = { width: 630, height: 420 }; 

    page.open('http://example.com', function (status) { 

     page.render('small.png'); 

     phantom.exit(); 
    }); 
}); 
+0

Кажется, нужно работать, если у вас есть вторая часть внутри обратного вызова первого или оберните ее с помощью 'setTimeout'. Благодаря! – hielsnoppe

+0

Я изменил его на рекомендованный вами способ – Sven

Смежные вопросы