Использование Page load strategy для Chrome driver через php-webdriver

Разрабатываю парсер интернет-магазина на PHP. Задача: необходимо получить html-код каталога товаров, не дожидаясь полной загрузки сайта.

Для этой цели использую PHP Webdriver с браузером Chrome (ChromeDriver 81.0.4044.69). Чтобы магазин меня не забанил, использую прокси, что несколько замедляет загрузку сайта. Проблема заключается в том, что html-код каталога появляется в первые секунды загрузки, но команды после $driver->get('....') не будут выполняться, пока магазин не загрузится полностью со всеми скриптами, стилями, картинками и т.д. С целью увеличения производительности парсера хотелось бы,чтобы как только появился html-код каталога, прерывать загрузку и переходить к дальнейшему анализу полученного html.

    host = 'http://localhost:4444';
    $options = new ChromeOptions();

    $options->addArguments([
        '--window-size=1500,800',
        '-proxy-server=socks4://IPпрокси:ПортПрокси',
    ]);

    $desiredCapabilities = DesiredCapabilities::chrome();
    $desiredCapabilities->setCapability(ChromeOptions::CAPABILITY, $options);

    $driver = RemoteWebDriver::create($host, $desiredCapabilities);
    $content = $driver->get('https://www.какой-то-интернет-магазин.ru/')->getPageSource();
    // ждёт полной загрузки страницы и только потом выполняется дальше
    $catalog = ... анализ html: вытаскиваю из $content интересующий меня фрагмент каталога;
    file_put_contents('Catalog.html', $catalog);

Лучшее решение этой проблемы без костылей - это использование Page load strategy в режиме eager или none. Знаю, что это возможно с версии ChromeDriver 77.0. Нашёл решение для других языков программирования, однако мне не хватает опыта, чтобы реализовать тоже самое на PHP Webdriver. Также здесь рассказывается о:

1) костыльном методе через таймаут ожидания загрузки, но не факт, что нужный мне элемент успеет загрузиться за явно выставленное время;

2) нужной мне стратегии ожидания загрузки, но опять-таки не понятно, как это реализовать на PHP Webdriver.


Ответы (1 шт):

Автор решения: Jetfox

Спросил ответ у официальных разработчиков библиотеки на Github, они мне ответили здесь: https://github.com/php-webdriver/php-webdriver/issues/786

→ Ссылка