Соскоб экрана, когда результаты не могут быть найдены? - PullRequest
0 голосов
/ 31 марта 2012

У меня есть следующий код в задаче очистки граблей

page = agent.get("https://domainname.co.uk/unit/27/logs?type=incoming&page=8")
page = agent.page.search("table tbody tr").each do |row|
  next if (!row.at('td'))
  time, source, destination, duration = row.search('td')[1..5].map{ |td| td.text.strip }
  parsed_time = Time.parse(time)
  unless Call.find_by_time(parsed_time)
    Call.create({:time => parsed_time, :source => source, :destination => destination, :duration => duration})
  end
end

В этом разделе сценария выполняется переход к странице 8, а затем создается запись вызова для каждой строки таблицы данных.

Если на странице, на которую я перешел, нет журналов вызовов, отображается следующий код:

<tr class='no-data'>
 <td colspan='7'>There are no call records matching the search criteria</td>
</tr>

Когда задача rake переходит на страницу без журналов вызовов, задача не может быть выполнена. Это показывает следующую ошибку:

* * 1010

Итак, есть ли способ использовать Nokogiri и Mechanize для восстановления после нуля? Есть ли простой способ проверить, существует ли <tr class='no-data'> перед попыткой импортировать данные?

Обновление с предлагаемым кодом

Сообщение об ошибке

Scraping Page 9
rake aborted!
can't convert nil into String

Код

puts 'Scraping Page 9'    
    if agent.page.root.css('tr.no-data').empty?
      page = agent.get("https://domaindname.co.uk/27/logs?type=incoming&page=9")
      page = agent.page.search("table tbody tr").each do |row|
        next if (!row.at('td'))
        time, source, destination, duration = row.search('td')[1..5].map{ |td| td.text.strip }
        parsed_time = Time.parse(time)
        unless Call.find_by_time(parsed_time)
          Call.create({:time => parsed_time, :source => source, :destination => destination, :duration => duration})
        end
      end
    else
      puts 'No calls on this page'
    end

1 Ответ

1 голос
/ 31 марта 2012

Вы можете проверить, существует ли этот элемент

if agent.page.root.css('tr.no-data').empty?
   # it doesn't exist
else
   # do the normal thing
end
...