Как получить доступ к элементу с двумя классами, разделенными пробелом, и отбросить все остальные (нокогири, рубин на рельсах) - PullRequest
0 голосов
/ 07 января 2019

Я пишу парсер и хочу получить элемент только с именем класса "row1 processing"

  <tbody class = "processed"> some data1 </tbody> 
  <tbody class = "row1 props processed"> some data2 </tbody> 
  <tbody class = "row1 processed"> some data3 </tbody> 

через камень нокогири.

Я могу сделать это для row1, обработано, реквизит; но мне нужно только "обработано row1"

   test =  el.css('tbody.row1')
   test =  el.css('tbody.processed')

Как я могу это сделать?

Я использую ruby ​​на рельсах 5.2.2

Обновление

Когда я набрал el.css ('tbody.row1.props'), он отображал информацию из этого элемент

 <tbody class = "row1 props processed"> some data2 </tbody> 

но когда я добавил "обработанный" класс, я ничего не получил ...

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Как упоминалось на канале разработчиков Slack на Ruby, основная проблема здесь заключается в том, что Nokogiri может получить доступ только к изначально загруженному HTML со страницы (что вы видите, когда нажимаете кнопку View Source), прежде чем он был изменен JavaScript. Вот почему он недоступен в Nokogiri, так как на данный момент класс processed не был загружен. Другой ответ здесь работает, если HTML доступен при загрузке страницы.

Если вам нужно изменить страницу после того, как она была изменена JavaScript, у вас есть два варианта: либо использовать JavaScript для доступа к недавно измененным элементам DOM, либо переосмыслить, как вы анализируете веб-страницу, чтобы получить то, что вы хотите.

0 голосов
/ 08 января 2019

Разделите несколько классов точками:

el.css('tbody.row1.processed')
...