У меня есть скрипт PhantomJS, который я пытаюсь использовать, чтобы по существу генерировать видео определенного веб-сайта.PhantomJS - pause/resume Выполнение javascript
var page = require('webpage').create();
page.viewportSize = {
width: 1280,
height: 720
};
page.open('http://my-awesome-site.whatever', function() {
var fps = 30;
var seconds = 10;
var elapsed = 0;
var current = 0;
takeScreenShot();
function takeScreenShot() {
if (elapsed < seconds * 1000) {
page.render('screenshot_' + (current++) + '.png');
elapsed += 1000/fps;
setTimeout(takeScreenShot, 1000/fps);
}
else {
phantom.exit();
}
}
});
выше сценарий будет пытаться занять 30 скриншотов в секунду в течение 10 секунд, которые я затем комбинируют в mp4 с помощью FFmpeg.
Проблема в том, что функция page.render() не является мгновенной и не останавливает выполнение скриптов на странице. Поэтому, когда я указываю на страницу с использованием анимаций jQuery, которые, как я полагаю, полагаются на setTimeout, эти тайм-ауты продолжают выполняться при обработке каждого скриншота. В результате выведенное видео очень сильно ускорилось.
Есть ли способ через PhantomJS приостановить выполнение сценария? То, что я надеюсь на это, чтобы сделать что-то вроде:
page.pause();
page.render('screenshot_' + (current++) + '.png');
page.resume();
Но, к сожалению, я не вижу ничего подобного в их API Docs.
Отключение javascript не будет работать, потому что мне нужно возобновить выполнение между снимками экрана. Возможно, ваше второе предложение может работать, я мог бы поставить на страницу какие-то глобальные функции паузы/возобновления, но на этот момент это было бы очень много. Я надеялся, что будет более простой способ. – Danny
вы можете сделать page.open каждые 30 секунд ... – xShirase