Загрузка файла в безголовом хроме с использованием Laravel/Dusk

Я пытаюсь автоматизировать загрузку файла в безголовом хроме с помощью Laravel/Dusk. В режиме графического интерфейса файл отлично загружается в мою папку загрузки. Но в безголовом режиме загрузка вообще не происходит. Есть ли способ решить этот вопрос?


person Madhav Kurup    schedule 18.05.2018    source источник
comment
См. stackoverflow.com/q/48888036/4848587.   -  person Jonas Staudenmeir    schedule 18.05.2018


Ответы (3)


Для тех, кто сталкивался с этим, я нашел простое решение с текущей версией Laravel на момент написания этой статьи.

Я предлагаю сначала создать каталог в вашем пути к хранилищу с именем temp (вероятно, вы также хотите игнорировать это), а затем перейти к настройке файла DuskTestCase.php с установкой Dusk.

В методе driver добавьте следующее в раздел, который инициализирует переменную ChromeOptions.

$options->setExperimentalOption('prefs', [
    'download.default_directory' => storage_path('temp')
]);

Теперь функция driver должна выглядеть так:

$options = (new ChromeOptions())->addArguments([
    '--disable-gpu',
    '--headless',
    '--window-size=1920,1080'
]);

$options->setExperimentalOption('prefs', [
    'download.default_directory' => storage_path('temp')
]);

return RemoteWebDriver::create(
    'http://localhost:9515',
    DesiredCapabilities::chrome()->setCapability(
        ChromeOptions::CAPABILITY,
        $options
    )
);

В качестве примечания, это сработало для меня с PDF-файлом, созданным с помощью JS, поэтому я не могу точно сказать, как это работает с файлом, загруженным из серверной части.

person Garrett    schedule 29.03.2020

Нет необходимости запускать отдельный Guzzle POST, вместо этого я использовал CustomWebDriverCommand:

$command = new \Facebook\WebDriver\Remote\CustomWebDriverCommand(
    $driver->getSessionID(),
    "/session/:sessionId/chromium/send_command",
    "POST",
    [
        "cmd" => "Page.setDownloadBehavior",
        "params" => ["behavior" => "allow", "downloadPath" => '/your/download/path']
    ]
);
$driver->getCommandExecutor()->execute($command);
person buchi    schedule 17.07.2020
comment
Добро пожаловать в сообщество StackOverflow. Проверьте stackoverflow.com/help/how-to-ask, чтобы улучшить свой вопрос. Надеюсь, вы останетесь с нами надолго :) - person Aleksander Ikleiw; 17.07.2020

person    schedule
comment
Ответы, содержащие только код, не считаются качественными. Пожалуйста, откройте и уточните, что делает этот фрагмент кода. Также, если вы куда-то скопировали, укажите источник. Спасибо. - person quinz; 11.07.2018
comment
Это прямой ответ на вопрос. Любой, кто немного знаком с личиночными сумерками, поймет его. В любом случае он перезаписывает поведение загрузки Chrome для определенного сеанса. Вот ссылка (bugs.chromium.org/p/chromium /issues/detail?id=696481#c61) - person Yuvrajsinh Jhala; 12.07.2018