Использование стратегии загрузки страницы для драйвера Chrome через php -webdriver - PullRequest
0 голосов
/ 30 апреля 2020

Я разрабатываю парсер интернет-магазина на 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.

...