Механизация не распознавания тегов привязки с помощью методов селектора CSS - PullRequest
4 голосов
/ 10 февраля 2010

(Надеюсь, это не нарушение этикета: я опубликовал это на RailsForum, но в последнее время я не получил от него большого отклика.)

У кого-нибудь еще были проблемы с Mechanize, не распознающим теги привязки с помощью селекторов CSS?

HTML-код выглядит так (фрагмент с пробелом удален для ясности):

<td class='calendarCell' align='left'>
<a href="http://www.mysite.org/index.php/site/ActivitiesCalendar/2010/02/10/">10</a>
<p style="margin-bottom:15px; line-height:14px; text-align:left;">
<span class="sidenavHeadType">
 Current Events</span><br />
<b><a href="http://www.mysite.org/index.php/site/
Clubs/banks_and_the_fed" class="a2">Banks and the Fed</a></b>
<br />
10:30am- 11:45am
</p>

Я пытаюсь собрать данные об этих событиях. Все работает, кроме получения якоря в <p>. Внутри <b> явно есть тег <a>, и мне нужно перейти по этой ссылке, чтобы получить более подробную информацию об этом событии.

В моем задании по рейку у меня есть:

agent.page.search(".calendarCell,.calendarToday").each do |item|
  day = item.at("a").text

  item.search("p").each do |e|
    anchor   = e.at("a")
    puts anchor
    puts e.inner_html

  end
end

Что интересно, item.at ("a") всегда возвращает якорь. Но e.at ("a") возвращает ноль. И когда я делаю inner_html для элемента p, он полностью игнорирует привязку. Пример вывода:

nil

<span class="sidenavHeadType">
 Photo Club</span><br><b>Indexing Slide Collections</b>
<br>
2:00pm- 3:00pm

Однако, когда я запускаю тот же скрести напрямую с Нокогири:

doc.css(".calendarCell,.calendarToday").each do |item|
  day = item.at_css("a").text
  item.css("p").each do |e|
    link     = e.at_css("a")[:href]
    puts e.inner_html
  end
end

Он распознает внутреннюю часть

и вернет href и т. Д.

<span class="sidenavHeadType">
 Bridge Party</span><br><b><a href="http://www.mysite.org/index.php/site/Clubs/party_bridge_51209" class="a2">Party Bridge</a></b>
<br>
7:00pm- 9:00pm

Механизация должна использовать Нокогири, поэтому мне интересно, есть ли у меня плохая версия или это также влияет на других.

Спасибо за любые предложения.

1 Ответ

1 голос
/ 10 февраля 2010

Неважно. Ложная сигнализация. В моей задаче Nokogiri я указывал на локальную копию страницы с якорями. Живая страница требует входа в систему, поэтому, когда я просматривал ее, я мог видеть теги. Добавление логина в грабли решило задачу.

...