Я новичок в Ruby и watir-webdriver, и я пытаюсь извлечь данные с веб-сайта и не могу понять, как получить доступ к определенной ячейке в таблице HTML. Я не могу найти идентификатор, имя или класс, чтобы отличить ячейку, в которой я нуждаюсь. Я думаю, что таблица генерируется динамически. Вот что я имею до сих пор:
require 'watir-webdriver'
browser = Watir::Browser.new:firefox
browser.goto 'http://oh-scioto-auditor.publicaccessnow.com/search.aspx'
browser.text_field(:id => "fldSearchFor").set '011234000'
browser.button(:name => 'btnSearch').click
browser.link(:text => 'Parcel Detail').click
puts browser.table(:id => 'lxT380').exists?
browser.td(:index => 0).each do |data|
puts data.text
end
Когда я использую firebug в firefox для получения уникального селектора, это то, что я получаю:
#lxT380 > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(4) > td:nth-child(1)
Это может быть полезно, но, как я уже сказал, я новичок в Ruby, и я не уверен, что с ним делать. Любой вход был бы оценен.
Как вы упомянули, проблема с таблицей заключается в том, что существуют отличительные атрибуты. В результате, я думаю, что ваш лучший выбор - найти ячейки:
Например, адрес налогоплательщика находится внутри этой таблицы (которая вложена в кучу других не описательных таблиц):
<table class=" ui-corner-all" border="1" width="250">
<tbody>
<tr>
<td colspan="2" class="ui-state-default">Property Address:</td>
</tr>
<tr>
<td colspan="2" height="95" valign="top">3069 GEPHART RD</td>
</tr>
<tr>
<td colspan="2" class="ui-state-default">Tax Payer Address:</td>
</tr>
<tr>
<td colspan="2" height="95" valign="top">FAULKNER PATRICK EUGENE +<br>2112 GEPHART RD<br>WHEELERSBURG OH 45694<br>USA </td>
</tr>
</tbody>
</table>
Чтобы получить адрес плательщика, найдите строку, содержащую заголовок "Налоговый плательщик:":
tax_payer_address_label = browser.tr(:text => 'Tax Payer Address:')
Получите следующую строку, которая считается адресом:
tax_payer_address = tax_payer_address_label.tr(:xpath => './following-sibling::tr')
Наконец, получите текст строки/ячейки:
puts tax_payer_address.text
#=> FAULKNER PATRICK EUGENE +
#=> 2112 GEPHART RD
#=> WHEELERSBURG OH 45694
#=> USA
Как полный рабочий сценарий:
require 'watir-webdriver'
browser = Watir::Browser.new:firefox
browser.goto 'http://oh-scioto-auditor.publicaccessnow.com/search.aspx'
browser.text_field(:id => "fldSearchFor").set '011234000'
browser.button(:name => 'btnSearch').click
browser.link(:text => 'Parcel Detail').click
tax_payer_address_label = browser.tr(:text => 'Tax Payer Address:')
tax_payer_address = tax_payer_address_label.tr(:xpath => './following-sibling::tr')
puts tax_payer_address.text
#=> FAULKNER PATRICK EUGENE +
#=> 2112 GEPHART RD
#=> WHEELERSBURG OH 45694
#=> USA
Обратите внимание, что вы также можете использовать один xpath, но не так приятно читать/писать:
puts browser.tr(:xpath => '//tr[normalize-space(.) = "Tax Payer Address:"]/following-sibling::tr').text
#=> FAULKNER PATRICK EUGENE +
#=> 2112 GEPHART RD
#=> WHEELERSBURG OH 45694
#=> USA