【问题标题】:how to Execute PhantomJS from PHP如何从 PHP 执行 PhantomJS
【发布时间】:2013-12-10 17:31:24
【问题描述】:

我想在本地主机上从 PHP 执行 PhantomJS。

谁能解释如何从 PHP 执行 PhantomJS 以及我应该从 phantomjs.org 下载什么包?

【问题讨论】:

标签: javascript php phantomjs php-phantomjs


【解决方案1】:

我最近发布了一个让 PHP 访问浏览器的项目。在这里获取:https://github.com/merlinthemagic/MTS。在底层它依赖于 PhantomJS。

下载和设置后,您只需使用以下代码:

$myUrl          = "http://www.example.com";
$windowObj      = \MTS\Factories::getDevices()->getLocalHost()->getBrowser('phantomjs')->getNewWindow($myUrl);

//now you can either retrive the DOM and parse it, like this:
$domData    = $windowObj->getDom();

//or take screen shots
$imageData    = $windowObj->screenshot();

//or use the mouse to click buttons:
$windowObj->mouseEventOnElement("[id=searchInput]", 'leftclick');

//or type with the keyboard :
$windowObj->sendKeyPresses("my search words");

//or load and execute custom javascript, fill forms etc, etc.

【讨论】:

  • 我在 Windows 10 中尝试了 MTS,但它不起作用:“致命错误:未捕获的异常:MTS\Common\Devices\Actions\Local\Host\OperatingSystem::execute>> 无法确定操作系统……中的建筑”
  • @Tarilonte SO 不是解决问题的合适场所,请转到github.com/merlinthemagic/MTS/issues 并打开一个新问题。
【解决方案2】:

实际上有一个名为PHP PhantomJS 的库,旨在让您更轻松!

PHP PhantomJS 是一个灵活的 PHP 库,通过 PhantomJS 无头浏览器并返回页面响应。很方便 用于测试需要 javascript 支持并且还支持的网站 屏幕截图。

Full documentation

功能列表:

  • 通过 PhantomJS 无头浏览器加载网页
  • 查看详细的响应数据,包括页面内容、标题、状态码等。
  • 处理重定向
  • 查看 javascript 控制台错误
  • 查看详细的 PhantomJS 调试信息
  • 将屏幕截图保存到本地磁盘
  • 设置视口大小
  • 定义屏幕截图 x、y、宽度和高度参数
  • 将页面呈现延迟指定时间
  • 使用命令行选项执行 PhantomJS
  • 轻松构建和运行自定义 PhantomJS 脚本

不过,请确保您的 PhantomJS 版本与您的 PHP PhantomJS 版本兼容:

请注意:此库的 4.0 版目前正在等待 PhantomJS 2.0 未解决的问题。

【讨论】:

【解决方案3】:
  • 下载PhantomJS binary,上传到某处并使其可执行 (chmod +x)
  • 如果您要制作屏幕截图,请设置 fontconfig(这是非常特定于我的配置,但目标是确保您的系统上至少有一些字体)
  • 在 PHP 中运行以下命令:
    $response = exec('/path/to/phantomjs myscript.js');

【讨论】:

  • 非常感谢您的回答。我尝试在 Windows 7 和 xampp 服务器的本地主机上使用它。我如何使它可执行?我应该下载什么包? windows版还是linux版?
  • 对于任何对此解决方案有疑问的人,通过关注this answer,我成功地从 PHP 调用了我的 Phantom 脚本。
  • @Benjy 我试过这个$response = exec('/phantom/phantomjs myscript.js'); exec("phantom/bin/phantomjs phantom/examples/hello.js", $response); (replace " with normal ticks) echo implode("<br>", $response); 但没有任何回应,这是为什么呢?一切都有适当的权限,并且通过 SSH 执行没有问题
  • 如何使用 chmod +x 使 Phantomjs 可执行...我尝试在命令提示符下运行 chmod +x 命令,但它给出错误“无法打开 chmod”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 2015-06-17
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
相关资源
最近更新 更多