glaphire
@glaphire
PHP developer

Как в symfony/panther задать папку для скачивания файлов?

Пишу скрипт для автоматизации скачивания файлов через браузер. Использую symfony/panther в режиме эмуляции браузера. Под капотом у него php Webdriver. В issues к пантере есть обсуждение добавления управления параметрами хрома, но в то же время по документации сказано, что можно добавлять options в агрументах конструктора клиента (ссылка на гитхаб).
Сейчас у меня такой упрощенный код:
<?php

namespace App\Module\SymfonycastsParser\Services;

use Symfony\Component\Panther\Client;

class ParserService
{
    private $browserClient;

    public function __construct()
    {
        $this->browserClient =  Client::createChromeClient(
            null,
            ['--window-size=1200,1100'],
            ['download.default_directory=/path/to/dir']
        );
    }


Вариант ['download.default_directory' => '/path/to/dir'] тоже ничего не дает.
Путь к папке рабочий, права 775. Не получается подобрать другие options, чтобы в корне проверить их работоспособность. Какие могут быть варианты решения? Выкинуть panther и писать на голом webdriver?
  • Вопрос задан
  • 231 просмотр
Решения вопроса 1
glaphire
@glaphire Автор вопроса
PHP developer
Нашла ответ на свой вопрос :)
1. Panther это хорошо, но тонкая настройка хрома там сейчас не реализована. Переписала на php-webdriver.
2. На wiki весьма скудные примеры, как добавлять настройки хрому, через setExperimentalOptions() настраиваются почти все параметры, даже если это настройки профиля.
3. Правильный ответ я нашла с помощью stackoverflow: ccылка
Упрощенно код выглядит так:
<?php

use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;

class ParserService
{
    private $webdriver;

    public function __construct()
    {
        $host = 'http://localhost:4444';
        $options = new ChromeOptions();
        $options->setExperimentalOption("prefs", [
            "download.prompt_for_download" => false,
            "download.directory_upgrade" => true,
            "safebrowsing.enabled" => true,
            "download.default_directory" => "/path/to/dir",
        ]);
        $caps = DesiredCapabilities::chrome();
        $caps->setCapability(ChromeOptions::CAPABILITY, $options);
        $this->webdriver = RemoteWebDriver::create($host, $caps);
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы