У меня есть следующий фрагмент кода из моего скрипта очистки экрана (в приложении 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>
К сожалению, эти строки не имеют уникальных идентификаторов.
Любая помощь / совет приветствуется!
Есть ли лучший способ написать сценарий, который будет более надежным в будущем?