Как я могу увеличить производительность автоматизированных скриптов watir-webdriver - PullRequest
0 голосов
/ 28 марта 2012

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

В настоящее время я беру таблицу и преобразовываю ее в массив:

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х25 в массив. Мне нужно сделать это для более чем 80 таблиц, так что на это уходит 1-2 часа. Почему это занимает так много времени и как я могу улучшить скорость?

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

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

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

Ответы [ 3 ]

4 голосов
/ 28 марта 2012

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

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

Хотелось бы увидеть больше подробностей.Если вы можете предоставить пример кода + HTML, который демонстрирует проблему, отправьте ее в систему отслеживания проблем .

0 голосов
/ 02 июня 2016

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

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

0 голосов
/ 28 марта 2012

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

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

...