【问题标题】:Puppeteer won't load page from laravel exec() in controllerPuppeteer 不会从控制器中的 laravel exec() 加载页面
【发布时间】:2019-05-03 22:20:22
【问题描述】:

在 127.0.0.1:8000 上运行的 Laravel 5.6

我有一个使用 Puppeteer 并打开页面的文件 capture.js

127.0.0.1:8000/渲染

当我从命令行调用它时,它工作得很好。

node capture.js

现在当我使用 laravel 控制器调用它时

exec('node capture.js' )

它启动了 Puppeteer,但页面没有加载(超时)

当我尝试使用 capture.js 从控制器加载另一个页面(例如:google.fr)时,它运行良好。

和网络有关系吗?本地主机在 8000 端口上?

headless false 或 true 给出相同的结果 => TIMEOUT

【问题讨论】:

  • 其他可执行文件怎么样?启动浏览器怎么样?代码是否以相同的用户、环境和权限运行?
  • @UlrichEckhardt 一切都很好,实际上 puppeteer 启动了,只是无法从 localhost 端口 8000 加载此特定页面

标签: php node.js laravel puppeteer


【解决方案1】:

您正在从启动 laravel 应用所需的文件中调用 exec。由于 exec 阻止 laravel 应用程序启动,它会超时。

这是一个正在做的例子,

Laravel 应用程序 -> Puppeteer -> 等等!去获取 Laravel 应用

【讨论】:

  • 谢谢。实际上 laravel 应用程序已经在运行,通过在 laravel 上下文之外渲染页面来解决,并在端口 3000 上提供快速服务。
【解决方案2】:

我在 Symfony 3.4 项目中遇到了完全相同的问题。

问题来自会话:

当调用 exec() 命令时,PHP 会话已经存在并且会话文件被锁定。 而当 NodeJS 脚本尝试连接时,会出现超时,因为会话文件不可用。

我通过在 exec() 命令上方添加以下指令解决了这个问题:

session_write_close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多