gpt4 book ai didi

javascript - PhantomJS - 暂停/恢复 javascript 执行

转载 作者:行者123 更新时间:2023-11-28 00:55:18 25 4
gpt4 key购买 nike

我有一个 PhantomJS 脚本,我试图使用它来生成特定网站的视频。

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

上面的脚本将尝试在 10 秒内每秒截取 30 张屏幕截图,然后我使用 ffmpeg 将其组合成 mp4。

问题是 page.render() 函数不是瞬时的,并且不会停止页面上运行的脚本。因此,当我指向使用 jQuery 动画的页面时(我相信该动画依赖于 setTimeout),在处理每个屏幕截图时,这些超时会继续运行。结果,输出的视频速度明显加快。

有没有办法通过 PhantomJS 来暂停脚本执行?我希望做的是这样的事情:

page.pause();
page.render('screenshot_' + (current++) + '.png');
page.resume();

但遗憾的是,我在他们的 api 文档中没有看到类似的内容。

最佳答案

如果页面看起来不太依赖JS,你可以设置page.settings.javascriptEnabled=false。请注意,您需要在第一次调用之前定义设置,因为它们仅评估一次,例如:

var page = require('webpage').create();
page.settings = {
javascriptEnabled=false
}

参见:http://phantomjs.org/api/webpage/property/settings.html

如果它不符合您的需要,您需要深入研究页面代码以找到停止动画的方法(使用浏览器的控制台)。一旦您知道需要做什么,只需在 Phantom 中评估该命令即可。

page.open('http://my-awesome-site.whatever', function() {
var stopScripts = page.evaluate(function() {
// do whatever you need to stop execution
return true;
});
// ... take your screenshots
});

关于javascript - PhantomJS - 暂停/恢复 javascript 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26291773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com