Не удается получить данные из таблицы с помощью watir-webdriver

Я новичок в 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 и не знаю, что с ним делать. Любой вклад будет оценен.


person Tim Horner    schedule 19.03.2014    source источник
comment
Как, как пользователь, вы бы решили, какая ячейка вам нужна?   -  person Justin Ko    schedule 19.03.2014
comment
@Justin Ko, извините, я должен был упомянуть, что я пытаюсь получить платежный адрес, указанный чуть ниже ячейки, содержащей адрес налогоплательщика:   -  person Tim Horner    schedule 19.03.2014


Ответы (1)


Как вы упомянули, проблема с таблицей заключается в том, что в ней есть отличительные атрибуты. В результате я думаю, что ваш лучший выбор — найти ячейки по:

  1. Нахождение известного текста и
  2. Затем найти нужную ячейку по отношению к этому.

Например, адрес налогоплательщика находится внутри этой таблицы (которая вложена в кучу других не описательных таблиц):

<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 
person Justin Ko    schedule 19.03.2014
comment
Если мне нужна помощь watir, я просто ищу как watir и ваше имя. Вся помощь попадает в список поиска. Великий Джастин. +1 - person Arup Rakshit; 19.03.2014