php使用puppeteer的idle_timeout设置超时时间不生效

今天使用 queryList的puppeteer插件(实际也就是nesk/puphpeteer) ,发现时间超过60秒后就抛异常,使用设置idle_timeout、timeout参数貌似都没有生效

$ql->chrome(function ($page,$browser) {...}, [
    'idle_timeout' => 0, //值也尝试过不用0,设置成1000000也无效,到时间就退出了
    'timeout' => 0,
])

报错如下:

The idle timeout (60.000 seconds) has been exceeded. Maybe you should increase the "idle_timeout" option.

经尝试,问题已解决。配置项在options这里设置本身就不生效,需要在实例化puppteer对象时传递给构造函数。

个人处理过程如下,供同学们参考:

尝试1

首先根据nesk/puphpeteer的readme介绍中提到This will create a new Node process controlled by PHP.,是创建一个由php控制的node进程,那么初步怀疑是否存在socket通信超时问题,于是到php.ini文件中找到

; Default timeout for socket based streams (seconds)
; http://php.net/default-socket-timeout
default_socket_timeout = 60

修改时间,无效, PASS!

尝试2

不再使用quryList,直接使用nesk/puphpeteer试试idle_timeout参数是否生效

use Nesk\Puphpeteer\Puppeteer;

$puppeteer = new Puppeteer;
$browser = $puppeteer->launch([
    'idle_timeout' => 1000000, //超时时间,因为不确定是秒还是毫秒,所以设置的大了点
    'headless' => false
]);
$page = $browser->newPage();
$page->goto('https://example.com');

sleep(100); // 等100秒

$browser->close();

结果,也无效,PASS!

尝试3

在实例化Puppeteer时向构造函数传递idle_timeout设置项,而不再通过launch设置。

use Nesk\Puphpeteer\Puppeteer;

$puppeteer = new Puppeteer([
    'idle_timeout' => 1000000 //超时时间,因为不确定是秒还是毫秒,所以设置的大了点
]);
$browser = $puppeteer->launch([
    'headless' => false
]);
$page = $browser->newPage();
$page->goto('https://example.com');

sleep(100); // 等100秒

$browser->close();

OK,生效

done

因此,我在queryList依赖包文件 jaeger/querylist-puppeteer/Chrome.php 中修改了超时时间(当然不推荐这样做,不过我图快且非正式项目,无所谓)

public static function render(QueryList $queryList,$url,$options)
 {
        $options = self::mergeOptions($options);
        $puppeteer = new Puppeteer(['idle_timeout' => 3600]);
        ...
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白旗

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值