Я разрабатываю парсер интернет-магазина на PHP. Задача: Мне нужно получить html -код каталога продукции, не дожидаясь полной загрузки сайта.
Для этого я использую PHP Webdriver с Chrome браузер ( ChromeDriver 81.0.4044.69). Чтобы магазин не забанил меня, я использую прокси, который замедляет загрузку сайта. Проблема в том, что код html каталога появляется в первые секунды загрузки, но команды после $driver->get('....')
не будут выполняться, пока хранилище не будет полностью загружено всеми сценариями, стилями, изображениями и т. Д. c. Чтобы повысить производительность парсера, хотелось бы, как только появится код каталога html, прервать загрузку и перейти к дальнейшему анализу полученного html.
host = 'http://localhost:4444';
$options = new ChromeOptions();
$options->addArguments([
'--window-size=1500,800',
'-proxy-server=socks4://proxyIP:proxyPort',
]);
$desiredCapabilities = DesiredCapabilities::chrome();
$desiredCapabilities->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = RemoteWebDriver::create($host, $desiredCapabilities);
$content = $driver->get('https://www.some-internet-store.com/')->getPageSource();
// waits for the page to load completely before proceeding further
$catalog = ... html analysis: getting the catalog fragment that interests me from $content;
file_put_contents('Catalog.html', $catalog);
Лучшее решение этой проблемы - использовать стратегию загрузки страницы в активном режиме или без режима. Я знаю, что это возможно с версией ChromeDriver 77.0. Я нашел решение для других языков программирования , но у меня недостаточно опыта, чтобы реализовать то же самое на PHP Webdriver. Этот ресурс также говорит о:
1) не оптимальном способе через тайм-аут ожидания загрузки, но не факте, что нужный мне элемент удастся загрузить в явно заданном time;
2) нужная мне стратегия загрузки страницы, но опять же неясно, как реализовать это на PHP Webdriver.