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

テーブルには20行がある場合の動作table = b.table(:index, 5).to_aは分を引き継ぎます。 20 X 25テーブルのセルを配列に入れるのは非常に速いはずです。私は80以上のテーブルのためにこれを行う必要があるので、それは実行するために1-2時間かかる。なぜそれは長くかかるのですか?どのように速度を上げることができますか?

Iは、第もアレイに変換することなく、テーブルの行を反復しようとしているが、性能の改善が見られなかった:Windows 7とのUbuntuを使用して

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

同じ結果が。私はまた、Chromeの代わりにFirefoxを目立つ違いなく試しました。

答えて

4

迅速な回避策は、あなただけのビッグページからデータを読んでいる場合は鋸山を使用することです:

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

私も詳細を見てみたいです。問題を示すコード+ HTMLの例を提供できる場合は、issue trackerに提出してください。あなたのコードの速度を向上しようとすることは、テストの実行時間(例えばruby benchmark)のいくつかの手段を有することが不可欠だ

+0

これは、私が特にconfにアリスターといくつかの会話に基づいて、彼は彼の掃海ロボットのためのこのアプローチを使用し、提案してきたであろうものもあります。 –

0

ruby-profを見て、各方法で費やされた時間の詳細を調べることもできます。

tableではなく、to_aメソッドではないかどうかを確認することから始めます。これは、そのコード行の遅延の原因となります。 Watirの内部(またはjaribの答えによるとnokogiri)がより速くなるかもしれません。

0

watirを使用するスクリプトのパフォーマンスを向上させるためにできることは、ブラウザへのリモート呼び出しの数を減らすことです。 DOM要素を見つけたり操作したりするたびに、ブラウザへの呼び出しであり、5ms以上かかることがあります。あなたのケースでは

、あなたはexecute_scriptを経由して、ブラウザ側で仕事をして()とルビー側の結果を確認することで、リモート呼び出しの回数を減らすことができます。

関連する問題