Не полностью импортированные записи с экрана - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть следующий фрагмент кода из моего скрипта очистки экрана (в приложении Rails 3.1):

# Add each row to a new call record
page = agent.page.search("table tbody tr").each do |row|
  next if (!row.at('td'))
  time, source, destination, duration = row.search('td').map{ |td| td.text.strip }
  call = Call.find_or_create_by_time(time)
  call.update_attributes({:time => time, :source => source, :destination => destination, :duration => duration})
end

Это работало, но я думаю, что некоторые изменения были сделаны на удаленном сайте (в настоящее время они не имеют API).

Новый код HTML выглядит следующим образом:

<tr class='o'>
<td class='checkbox'><input class="bulk-check" id="recordings_13877" name="recordings[13877]" type="checkbox" value="1" /></td>
<td>09 Feb 11:37</td>
<td>Danny McClelland</td>
<td>01772123573</td>
<td>00:00:28</td>
<td></td>
<td class='opt recording'>
<a href="/unit/27/logs/recording/13877"><img alt="" class="icon recordings" src="/images/icons/recordings.png?1313703677" title="" /></a>
<a href="/unit/27/logs/recording/13877" data-confirm="Are you sure you wish to delete this recording?" data-method="delete" rel="nofollow"><img alt="" class="icon recording-remove" src="/images/icons/recording-remove.png?1317304112" title="" /></a>
</td>
</tr>

Поскольку предполагаемые изменения происходят, данные импортируются в неправильные поля или пропускаются полностью. В настоящее время единственная часть данных, которые я хочу / нуждаюсь:

<td>09 Feb 11:37</td>
<td>Danny McClelland</td>
<td>01772123573</td>
<td>00:00:28</td>

К сожалению, эти строки не имеют уникальных идентификаторов.

Любая помощь / совет приветствуется! Есть ли лучший способ написать сценарий, который будет более надежным в будущем?

1 Ответ

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

первый тд сейчас флажок.Так что просто измените его на:

time, source, destination, duration = row.search('td')[1..5].map{ |td| td.text.strip }

На самом деле нет способа доказать будущее скребку (если вы не экстрасенс)

...