2012-03-27 53 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

這也是我所建議的,尤其是基於與Alister在conf上的一些對話,他將這種方法用於他的掃雷機器人。 – 2012-03-30 22:16:24

0

當試圖提高代碼速度時,必須要有一些測試執行時間的方法(例如ruby benchmark)。您也可以查看ruby-prof以詳細瞭解每種方法所花費的時間。

我會先嚐試確定它是不是to_a方法,而不是table,這會導致該行代碼的延遲。 Watir的內部結構(或nokogiri根據jarib的答案)可能會更快。

0

爲改善使用watir的腳本的性能,您可以做的第一件事是減少進入瀏覽器的遠程調用的數量。每次您在DOM元素上找到或操作時,這都是對瀏覽器的調用,可能需要5ms或更長時間。

就你而言,你可以通過在瀏覽器端通過execute_script()完成工作並檢查ruby端的結果來減少遠程調用的數量。