Как очистить динамический сайт с помощью Ruby - PullRequest
0 голосов
/ 16 октября 2018

Я хотел бы почистить веб-сайт реакции, на котором есть продукты с названиями и описаниями.Структура html выглядит следующим образом:

<h6 class="menu-index-page__item-title" data-reactid=".5c2v.$menuItemContent.0">
  <span data-reactid=".5c2v.$menuItemContent.0.1">Product name</span>
</h6>
<p class="menu-index-page__item-desc" data-reactid=".5c2v.$menuItemContent.1">
  <span data-reactid=".5c2v.$menuItemContent.1.0">
    <span data-reactid=".5c2v.$menuItemContent.1.0.0">
      <span data-reactid=".5c2v.$menuItemContent.1.0.0.0:$0">Description line 1</span>
      <br data-reactid=".5c2v.$menuItemContent.1.0.0.0:$0br">
    <span data-reactid=".5c2v.$menuItemContent.1.0.0.$1">
      <span data-reactid=".5c2v.$menuItemContent.1.0.0.$1.0">
        <span data-reactid=".5c2v.$menuItemContent.1.0.0.$1.0.0">Description line 2</span>
          <span data-reactid=".5c2v.$menuItemContent.1.0.0.$1.0.1">…</span>
      </span>
    </span>
  </span>
</p>

Если в описании больше или меньше строк, количество тегов span будет меняться, поэтому поиск по xpath будет недействительным.

Единственное, чтовозвращается для каждого продукта на каждой странице: .$menuItemContent.1.0.0.0:$0 для первой строки описания и .$menuItemContent.1.0.0.$1.0.0 для второй строки описания.

Могу ли я использовать, например, регулярное выражение, чтобы получить только эту часть изатрибут data-reactid?

В данный момент я использую Нокогири.

Спасибо

1 Ответ

0 голосов
/ 24 марта 2019

Цены, скорее всего, динамически загружаются с помощью javascript после завершения отображения веб-страницы.

Чтобы иметь возможность очищать динамически загружаемые данные, вам необходимо использовать такую ​​библиотеку, как Watir который поддерживается Rails 5.

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

...