Как сканировать динамически загружаемый список с помощью Selenium и Headless Chrome? - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь сканировать веб-сайт, который загружает большую часть его содержимого различными Вызовы JavaScript (которые занимают больше всего времени - это загрузка XHR). здесь есть ссылка на изображение активности страницы Я использую неявное ожидание, чтобы дождаться загрузки всей страницы, но когда я ищу элемент (var element = driver.FindElement (By.Id ("product-item-wrapper"));), он генерирует исключение noSuchElementException. Я попытался скопировать driver.PageSource и открыть его содержимое в текстовом редакторе, и я нашел HTML, который пытаюсь получить, но ChromeDriver, кажется, его не видит.

У меня была такая же проблема с другими элементами на странице, но я решил ее, добавив ImplicitWait, чтобы дождаться полной загрузки страницы.

Элементы, которые я пытаюсь найти, это список <div id="product-item-wrapper"> внутри <div class="tab-pane cc-list-tab active" id="product-grid" aria-live="polite">

(обратите внимание, что я анализирую driver.PageSource для HtmlDocument для работы с HtmlAgilityPack) мой код для получения элемента

        var productBoxNodesItemWrapper = htmlDoc.DocumentNode.SelectNodes("//div[@id='product-item-wrapper']");

но я тоже пытался

        var productBoxNodes = htmlDoc.DocumentNode.SelectSingleNode("//div[@id='product-list']");

чтобы найти весь элемент списка

Я хочу найти список обёрток товара, но он выдает исключение

когда я пытаюсь найти весь элемент списка товаров, productBoxNodes содержит:

  <div class="sr-only" data-bind="widgetLocaleText: 'listViewLoadedText'" role="alert">Some text not important</div>
  <div data-bind="foreach: currentProducts"></div>

и ничего внутри.

...