首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PhantomJS以不同的方式呈现不同服务器上的屏幕截图

PhantomJS以不同的方式呈现不同服务器上的屏幕截图
EN

Stack Overflow用户
提问于 2015-10-26 18:14:40
回答 1查看 486关注 0票数 2

今天,我一直在研究一个解决方案,为我的一个项目生成网站截图。在网上深入研究各种主题之后,我得出结论:使用PhantomJS可能是我最好的选择。

由于我运行的是一个流浪者(家庭宅基地)本地服务器,所以我需要将包从jonnyw/php-phantomjs (https://packagist.org/packages/jonnyw/php-phantomjs)转到一个现有的项目中,并使用一个基本脚本进行启动:

代码语言:javascript
复制
$client = Client::getInstance();
$client->debug(true);
$client->setBinDir('/home/admin/domains/domain.com/public_html/bin/');

$request = $client->getMessageFactory()->createCaptureRequest('http://www.domain.com/preview/H/31', 'GET');
$request->setCaptureFile('/home/admin/domains/domain.com/public_html/screens/sample.jpg');
$request->setViewportSize(1366, 768);

$response = $client->getMessageFactory()->createResponse();
$client->send($request, $response);

在代码停止抛出警告之前,我花了一小段时间,但最终代码还是正常工作的!然后,我继续将代码迁移到它应该在的项目中,该项目是用过程php代码编写的。我需要这个包,其中包括autoloader en,它执行的命令与在Vagrant环境中执行的命令完全相同。

结果有点不同:标题没有显示,背景图像也没有显示。我可能需要添加标题有一个自定义字体附加到它。

几周前,我为一个需要Laravel的客户端设置了一个服务器,我还需要该服务器上的包,并执行相同的代码。起初,我得到了一些随机的白色页面,但最终我得到了我期望的截图。我可以接受这样一个事实:一张截图会变成白色,只要它们最终出现在正确的地方。

然后,我回到了这个脚本的目的代码,并给了它更多的尝试。但结果仍然是白色或缺少一些元素(自定义字体标题+背景图像)。最后一次尝试是更改capture.proc文件,我在呈现图像之前添加了一个setTimeout函数。这确实解决了一个问题:从那以后我就没有任何白色图像,但是没有解决最重要的问题:缺少的标题和背景。

我已经检查了所有的bin文件,它们都使用了1.9.7版本的PhantomJS,所以我怀疑有什么问题。但是,在服务器配置(或PHP版本)中,是否存在阻止脚本给出正确结果的不同?

为了提供尽可能多的信息,问题服务器位于PHP的最低版本:

  • 问题服务器在PHP 5.5.18上
  • 工作服务器在PHP 5.5.27上
  • Homestead在PHP 5.6.11上
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-26 21:50:18

看起来,在加载页面和截图之前,您应该稍等一会儿。单页应用程序和Webfonts通常需要少量加载和呈现,而PhantomJS则有点急于触发加载已完成的事件并报告加载已经完成。

您可以在$request->setDelay(2);...->createCaptureRequest(..)之间挤进一个$request->setCaptureFile(...)。见文档

使用静态延迟并不是非常健壮的。最好使用一个函数,它在满足条件(例如页面上出现特定的页面元素)后立即触发。PHP-幻影‘s并不通过API提供这样的功能,但是您可以直接使用PhantomJS脚本来完成这类任务。见文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33352785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档