Как получить текстовое значение привязки href, сгенерированное javascript?

#javascript #ruby #selenium #web-scraping #nokogiri

#javascript #ruby #селен #веб-очистка #nokogiri

Вопрос:

При очистке платформы экстранета (с логином, поэтому я не могу разместить ссылку здесь) Я встретил этих парней:

 <td body>
<tr goto="javascript:prddetailrech(651438,'')" style="cursor:pointer;"><td valign="top" id="colREF"><a href="javascript:prddetailrech(651438,'');">C002</a></td>
 

Это первое из многих, и мне нужна эта ссылка: COO2.

Это мой код, после входа на платформу с selenium я использую nokogiri (только потому, что я знаю это лучше)

 driver.get 'http://riviera.prescripteurs.axessia.net/common/code/b2c/prd_b2c.asp?prd_PageSize=200'
doc = Nokogiri::HTML(driver.page_source)
appartments = []
rows = doc.css('tbody tr')
sleep 7
rows.each do |row|
  ref = row.css('colREF nobr a href').text
  appartment_info = {
    reference: ref
  }
  p appartments << appartment_info
 

И я получаю много {:reference=>»»} в массиве.
Есть идеи о том, как я мог бы получить это значение с помощью nokogiri или selenium (ruby)?
Я был бы признателен за любую обратную связь.

Ответ №1:

row.css('colREF nobr a href') не является правильным селектором CSS.

colREF это идентификатор, а не элемент HTML, поэтому вы могли бы получить к нему доступ #colREF .

href является атрибутом, а не элементом HTML. Вы не можете извлекать значения атрибутов напрямую с помощью селектора CSS, но вместо этого можете использовать .attributes метод Nokogiri:

 ref = row.css('#colREF a').attributes["href"].value
 

примечание. Я бы рекомендовал подправить селекторы CSS, см. https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors

Комментарии:

1. Большое спасибо, что нашли время для объяснения и для документа, собираюсь наверстать упущенное!

2. эй, я все еще борюсь, всегда получаю неопределенные атрибуты метода для [], я пробовал и другой способ, тоже не работает. Я что-то пропустил выше, doc = Nokogiri::HTML(driver.page_source) верно? я использую driver.page_source для создания ссылки с Selenium. Спасибо

3. Я тоже попробовал это ref = row.xpath(‘//td[@id=»colREF»]/a / @href’).text, и это дает мне массив со многими javascript: prddetailrech(728694,»), this (728694 не отображается на странице, но имеет что-точто касается strSQL, я вижу это при проверке

4. Запуск источника страницы через Nokogiri — это не то же самое, что запуск JS-команд в Selenium. Причина в том, что Selenium будет выполнять Javascript на странице, и во многих случаях это требуется для правильной загрузки данных на странице.

5. Спасибо, тогда попробую с Selenium!