PHP截图与phantomjs

时间:2015-08-07 08:25:08

标签: php laravel phantomjs

好的,所以我一直在研究这个/现在这几天了。我目前正在使用spatie / browsershot(https://github.com/spatie/browsershot)。

让我解释一下我首先尝试做的事情。

我正在尝试获取网页的屏幕截图(实际上是多个网页)。一个是移动版,另一个是桌面版。现在所有这些东西都有效并且不会造成任何麻烦...当我一次做一个时。

我也在使用laravel 5及其队列系统同时处理多个网页。这是我的问题开始的地方。当我运行大约5名工作人员来处理我的队列时,他们都会截取屏幕截图,这看起来没问题,因为他们所有的第一个屏幕截图总是成功。但由于某种原因,他们只是停在第二个屏幕截图(当我一次只做一次时,这不会发生)。

我认为phantomjs的可执行文件可能因崩溃而崩溃,但是当我创建2个单独的可执行文件并单独运行它们时(一个用于移动SS而另一个用于桌面SS)我仍然遇到这个问题。 / p>

任何人都有想法或者更好的解决方案来获取我需要的屏幕截图?

这是每个进程运行的javascript

$fileContent= "var page = require('webpage').create();
            page.settings.javascriptEnabled = true;
            page.viewportSize = { width: " . $this->width . ",height:1000 };
            page.open('" . $this->URL . "', function() {
               window.setTimeout(function(){
                page.render('" . $targetFile . "');
                phantom.exit();
            }, 5000); // give phantomjs 5 seconds to process all javascript
        });";

出于某种原因,当我将高度设置为1000时,它总是占据页面的整个高度。当我使用$ this-> width时,它不会这样做。

1 个答案:

答案 0 :(得分:1)

我过去也使用过phantomjs项目,遇到了许多不同的问题,我们的用户对此表示抱怨,它非常不稳定。我们对cron作业进行了大量重新启动,以成功实现屏幕截图。

目前,phantomjs项目已存档。 https://github.com/ariya/phantomjs

作为对您的问题的答案,“更好的解决方案来获取我需要的屏幕截图?” 我建议使用无头的chrome,目前在docker容器中使用 https://hub.docker.com/r/justinribeiro/chrome-headless/

这是一个快速而稳定的项目,您需要使用puppeter添加其他代码,但并不复杂 https://developers.google.com/web/tools/puppeteer/

目前,我的应用程序中此解决方案没有任何问题。