2012-03-27 2 views
0

Основная проблема, с которой я столкнулся, - это вытащить данные из таблиц, но любые другие общие советы тоже будут приветствоваться. Таблицы, которыми я занимаюсь, имеют примерно 25 столбцов и различное количество строк (от 5 до 50).Как повысить производительность автоматизированных скриптов watir-webdriver

В настоящее время я схватив со стола и преобразования его в массив:

require "watir-webdriver" 
b = Watir::Browser.new :chrome 
b.goto "http://someurl" 

# The following operation takes way too long 
table = b.table(:index, 1).to_a 

# The rest is fast enough 
table.each do |row| 
    # Code for pulling data from about 15 of the columns goes here 
    # ... 
end 
b.close 

Операция table = b.table(:index, 5).to_a занимает около минуты, когда таблица имеет 20 строк. Похоже, что очень быстро положить ячейки таблицы 20 X 25 в массив. Мне нужно сделать это для более чем 80 таблиц, так что это заканчивается тем, что требуется 1-2 часа для запуска. Почему он так долго и как я могу улучшить скорость?

Я попытался итерация строк таблицы без первого преобразования в массив, а также, но не было никакого улучшения в производительности:

b.table(:index, 1).rows.each do |row| 
    # ... 

Те же результаты, используя Windows 7 и Ubuntu. Я также попробовал Firefox вместо Chrome без заметной разницы.

ответ

4

Быстрый обходной путь будет использовать Nokogiri, если вы только чтение данных с большой страницы:

require 'nokogiri' 
doc = Nokogiri::HTML.parse(b.table(:index, 1).html)) 

Я хотел бы видеть больше деталей, хотя. Если вы можете предоставить код + HTML-пример, демонстрирующий проблему, отправьте его в поле issue tracker.

+0

Это то, что я бы предложил, особенно на основе некоторых разговоров с Алистером в conf, он использовал этот подход для своего тральщика-робота. –

0

При попытке улучшить скорость вашего кода жизненно важно иметь некоторые средства тестирования времени выполнения (например, ruby benchmark). Вы также можете посмотреть на ruby-prof, чтобы получить подробную информацию о времени, затраченном на каждый метод.

Я бы начал с попытки установить, является ли это не метод to_a, а не table, что вызывает задержки на этой строке кода. Внутренние органы Ватира (или нокогири в ответ на jarib) могут быть быстрее.

0

# 1, что вы можете сделать для повышения производительности скрипта, использующего watir, - это сократить количество удаленных вызовов в браузере. Каждый раз, когда вы находите или работаете с элементом DOM, это вызов в браузере и может занимать 5 мс или более.

В вашем случае вы можете уменьшить количество удаленных вызовов, выполнив работу со стороны браузера с помощью execute_script() и проверив результат на стороне рубина.

Смежные вопросы