gpt4 book ai didi

php - Laravel Dusk 和内存使用 - 如何关闭浏览器和自定义进程

转载 作者:行者123 更新时间:2023-12-04 17:36:34 27 4
gpt4 key购买 nike

我在 Controller 中使用 Laravel Dusk 供用户使用我的网站获取任何网站的屏幕截图。

我的代码:

<?php


namespace App\Http\Controllers;


use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Laravel\Dusk\ElementResolver;
use Exception;

use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Laravel\Dusk\Browser;
use Laravel\Dusk\Chrome\ChromeProcess;
use Facebook\WebDriver\WebDriverBy;

use Mail;

class ScreenController extends Controller {
public function take_screenshoot() {

$process = (new ChromeProcess)->toProcess();
if ($process->isStarted()) {
$process->stop();
}
$process->start();

$options = (new ChromeOptions)->addArguments([
'--disable-gpu',
'--headless',
'--window-size=1920,1080',
'--no-sandbox'
]);
$capabilities = DesiredCapabilities::chrome()->setCapability(ChromeOptions::CAPABILITY, $options);

$driver = retry(5, function () use ($capabilities) {
return RemoteWebDriver::create('http://localhost:9515', $capabilities, 50000, 60000);
}, 50);

$browser = new Browser($driver, new ElementResolver($driver, ''));
$browser->resize(1920, 1080);
$browser->visit('http://www.example.com')->mouseover('iframe');

$screenshoot_name = md5(time());
$browser->driver->takeScreenshot(base_path('tests/Browser/screenshots/'.$screenshoot_name.'.png'));
echo "<img src='/tests/Browser/screenshots/".$screenshoot_name.".png></img>";

$process->stop();


}

这里一切正常,只是内存使用量随着每个用户请求(用户访问)越来越高......如何解决这个问题?为什么 $process->stop();不关闭浏览器?

enter image description here

更新
我试过:
$browser->quit();


$browser->driver->quit();

但我有错误:

Facebook \ WebDriver \ Exception \ WebDriverCurlException Curl error thrown for http DELETE to /session/8a4f02f2d13648ccfbdead97b338e4f4 Failed to connect to localhost port 9515: Connection refused



更新 2.0
这是我运行时得到的
# ps -aux | less

enter image description here

最佳答案

我在使用包裹 chrome 的包时遇到了类似的问题。我最终做的是在命令行上运行它:

pkill -f -- "chromium-browser"

这杀死了所有包含 chromium-browser 的进程在里面。我确定有一种方法可以将其添加到代码中以在完成后触发。

关于php - Laravel Dusk 和内存使用 - 如何关闭浏览器和自定义进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56493345/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com