@jetf0x

Как задать 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 loading strategy в режиме eager или none. Знаю, что это возможно с версии ChromeDriver 77.0. Нашёл решение для других языков программирования, однако мне не хватает опыта, чтобы реализовать тоже самое на PHP Webdriver. Также здесь рассказывается о:
1) костыльном методе через таймаут ожидания загрузки, но не факт, что нужный мне элемент успеет загрузиться за явно выставленное время;
2) нужной мне стратегии ожидания загрузки, но опять-таки не понятно, как это реализовать на PHP Webdriver.
  • Вопрос задан
  • 373 просмотра
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Обычный curl() php-шный может рвать на середине потока, как только вы получили то, что нужно.
Почитайте доку на php.net
Ответ написан
@jetf0x Автор вопроса
Спросил ответ у официальных разработчиков библиотеки на Github, они мне ответили здесь: https://github.com/php-webdriver/php-webdriver/iss...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы