Ruby select 大按钮的最快方式 table
Ruby fastest way to select button in large table
我正在尝试与一个 table 看起来像这样的大型网站进行交互:
<table id="tblID" cellspacing="1" cellpadding="0" border="0" width="100%">
<tbody><tr valign="top" align="left">
<td colspan="6" height="10"></td>
</tr>
<tr><td bgcolor="#666666" height="1" colspan="6"><img src="img.gif" width="1" height="1" border="0"></td></tr>
<tr class="GridHeader" valign="top" align="left">
<td width="60"><b>Select</b></td>
<td width="210" colspan="2"><b>Account Type</b></td>
<td width="160" colspan="2"><b>Number</b></td>
<td width="200"><b>Account known as</b></td>
</tr>
<tr align="left" valign="middle">
<td class="normal"><input type="radio" id="radButton" name="radButton" value="1233399,1515636"></td>
<td class="normal">ACCTYPE</td>
<td class="normal" width="10"> </td>
<td class="normal">ACCNUMBER</td>
<td class="normal" width="10"> </td>
<td class="normal">ACCNAME</td>
</tr>
<tr align="left" valign="top">
<td height="1" colspan="6" bgcolor="#cccccc"><img src=".img.gif" width="1" height="1" border="0"></td>
</tr>
<tr align="left" valign="middle">
<td class="normal"><input type="radio" id="radButton" name="radButton" value="2263763,2777747"></td>
<td class="normal">ACCTYPE</td>
<td class="normal" width="10"> </td>
<td class="normal">ACCNUMBER</td>
<td class="normal" width="10"> </td>
<td class="normal">ACCNAME</td>
</tr>
这种情况持续了数百行。
我的代码的目的是根据 ACCNUMBER 和 select 关联的单选按钮搜索行。我的代码执行此操作,但需要很长时间才能完成。
我的 ruby 代码是这样的:
require 'watir'
require 'nokogiri'
html = browser.html
doc = Nokogiri::HTML(html)
*csv import and loop stuff*
bkacc = CSV[0]
*nokogiri go fast!*
rows = doc.css("table[id='tblID'] tbody tr")
rows.each do |row|
target = row.text[bkacc]
if !target.nil?
cells = row.css("td[class='normal']")
@pushme = cells[0].css('input')[0]['value']
end
end
*watir goes slow*
browser.table(:id,"tblMaintenance").tbody.trs(:valign,"middle").find do |tr|
temp = tr.td(index: 0).radio(:id => "radButton").attribute_value("value")
if temp == @pushme
tr.td(index: 0).radio(:id => "radButton").set
break
end
end
*other commands and loop to next line in csv*
使用 nokogiri 可以非常快速地找到我想要按下的按钮的 :value,但是一旦找到,使用那个 :value 来查找和设置按钮 watir 就非常慢。
我的问题是;我怎样才能加快速度?我想也许通过使用 mechanize 我可以,但语法让我逃脱了。我对 Ruby 还是很陌生,所以可能缺少一些基本知识。
假设id和value属性的组合对于每个单选按钮都是唯一的,您可以直接定位单选按钮。整个 Watir 循环可以替换为:
browser.radio(:id => "radButton", :value => @pushme).set
或者,我会尝试用以下内容替换这两个循环。查找行会比 Nokogiri 方法慢一点,但代码会简单得多。
row = browser.table(id: 'tblID').tr(text: /#{bkacc}/)
row.radio.set
我正在尝试与一个 table 看起来像这样的大型网站进行交互:
<table id="tblID" cellspacing="1" cellpadding="0" border="0" width="100%">
<tbody><tr valign="top" align="left">
<td colspan="6" height="10"></td>
</tr>
<tr><td bgcolor="#666666" height="1" colspan="6"><img src="img.gif" width="1" height="1" border="0"></td></tr>
<tr class="GridHeader" valign="top" align="left">
<td width="60"><b>Select</b></td>
<td width="210" colspan="2"><b>Account Type</b></td>
<td width="160" colspan="2"><b>Number</b></td>
<td width="200"><b>Account known as</b></td>
</tr>
<tr align="left" valign="middle">
<td class="normal"><input type="radio" id="radButton" name="radButton" value="1233399,1515636"></td>
<td class="normal">ACCTYPE</td>
<td class="normal" width="10"> </td>
<td class="normal">ACCNUMBER</td>
<td class="normal" width="10"> </td>
<td class="normal">ACCNAME</td>
</tr>
<tr align="left" valign="top">
<td height="1" colspan="6" bgcolor="#cccccc"><img src=".img.gif" width="1" height="1" border="0"></td>
</tr>
<tr align="left" valign="middle">
<td class="normal"><input type="radio" id="radButton" name="radButton" value="2263763,2777747"></td>
<td class="normal">ACCTYPE</td>
<td class="normal" width="10"> </td>
<td class="normal">ACCNUMBER</td>
<td class="normal" width="10"> </td>
<td class="normal">ACCNAME</td>
</tr>
这种情况持续了数百行。
我的代码的目的是根据 ACCNUMBER 和 select 关联的单选按钮搜索行。我的代码执行此操作,但需要很长时间才能完成。
我的 ruby 代码是这样的:
require 'watir'
require 'nokogiri'
html = browser.html
doc = Nokogiri::HTML(html)
*csv import and loop stuff*
bkacc = CSV[0]
*nokogiri go fast!*
rows = doc.css("table[id='tblID'] tbody tr")
rows.each do |row|
target = row.text[bkacc]
if !target.nil?
cells = row.css("td[class='normal']")
@pushme = cells[0].css('input')[0]['value']
end
end
*watir goes slow*
browser.table(:id,"tblMaintenance").tbody.trs(:valign,"middle").find do |tr|
temp = tr.td(index: 0).radio(:id => "radButton").attribute_value("value")
if temp == @pushme
tr.td(index: 0).radio(:id => "radButton").set
break
end
end
*other commands and loop to next line in csv*
使用 nokogiri 可以非常快速地找到我想要按下的按钮的 :value,但是一旦找到,使用那个 :value 来查找和设置按钮 watir 就非常慢。
我的问题是;我怎样才能加快速度?我想也许通过使用 mechanize 我可以,但语法让我逃脱了。我对 Ruby 还是很陌生,所以可能缺少一些基本知识。
假设id和value属性的组合对于每个单选按钮都是唯一的,您可以直接定位单选按钮。整个 Watir 循环可以替换为:
browser.radio(:id => "radButton", :value => @pushme).set
或者,我会尝试用以下内容替换这两个循环。查找行会比 Nokogiri 方法慢一点,但代码会简单得多。
row = browser.table(id: 'tblID').tr(text: /#{bkacc}/)
row.radio.set