Не могат да се получат данни от таблица с 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