#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!