Я пытаюсь получить доступ к последовательным элементам и не знаю, как продвигать скрипт на странице. Итак, вот фрагмент кода.
<div class="card highlighted">
<div class="card-fix">
<a class="card-remove icon" title="Don't show member again" onclick="$jq( '#search-results' ).msg( 'remove', this )" data-userid="93872246">
X
</a>
<dl></dl>
<div class="card-actions">
<a class="quickview" title="Quick view" onclick="$jq('#dialog-profile').msg('show', '/profileinfo/SearchProfi…lTseEdmEQ==&lid=1&searchType=S&pageNumber=1'); return false;" href="#"></a>
<a class="button button-primary" title="Favorite her!" href="/matchbook/addEntry.aspx?uid=Mu/BwYPn0nxhWlTseEdmEQ==&pn=1&rn=4&tp=S&handle=Annie5170&lid=1065"></a>
</div>
</div>
<div class="card-fix">
<a class="card-remove icon" title="Don't show member again" onclick="$jq( '#search-results' ).msg( 'remove', this )" data-userid="108272583"></a>
<dl></dl>
<div class="card-actions">
<a class="quickview" title="Quick view" onclick="$jq('#dialog-profile').msg('show', '/profileinfo/SearchProfi…DA3R3daaQ==&lid=1&searchType=S&pageNumber=1'); return false;" href="#"></a>
<a class="button button-primary" title="Favorite her!" href="/matchbook/addEntry.aspx?uid=y98x/Mj+hc+61DA3R3daaQ==&pn=1&rn=4&tp=S&handle=dancer4498&lid=1065"></a>
</div>
</div>
Другими словами, мне нужно продолжить цикл этих быстрых просмотров, а затем запустить небольшой скрипт и сделать все это снова. Затем перейдите на следующую страницу и сделайте это снова... и т.д. Однако, если я использую это сейчас в цикле, он будет получать только первый быстрый просмотр 5 раз.
# 5.times do |n|
# browser.link(:title => 'Quick view').click
# sleep (2)
# browser.link(:class => "icon dialog-abandon").click
# # sleep (2)
# end
Поэтому мой вопрос: как я могу продвигать его по всем быстрым представлениям, которые есть 18 на странице.
Также было бы здорово сохранить data-user-id="93872246"
и часть после дескриптора в href, то есть. handle=Annie5710
в файле в хеше.
Спасибо, и я ценю всю помощь.
Вы должны сделать это:
//get total title in a page
totalTitleSize=browser.link(:title => 'Quick view').size
и зацикливание:
totalTitleSize.times do |n|
browser.link(:title => 'Quick view', :index=> n).click
sleep (2)
//test it or use index in it If you need
browser.link(:class => "icon dialog-abandon").click
sleep (2)
end
Как показывают другие ответы, проблема в том, что строка:
browser.link(:title => 'Quick view').click
Всегда будет щелкнуть по первой соответствующей ссылке. Использование индекса: позволяет переопределить первое совпадение по умолчанию. Однако я бы сказал, что лучшим решением является получение коллекции совпадающих ссылок и повторение этого. Это избавит вас от ручной обработки индекса.
browser.links(:title => 'Quick view').each do |link|
link.click
sleep (2)
browser.link(:class => "icon dialog-abandon").click
sleep (2)
end
Обратите внимание, что мы создали коллекцию с использованием links
которые мы итерации используем each
.
Однако, поскольку вы также хотите собирать другие данные, вам может понадобиться выполнить итерацию через родительские div:
browser.divs(:class => 'card-fix').each do |parent_div|
puts parent_div.link(:class => 'card-remove').data_userid
#=> "93872246"
href = parent_div.button(:class => 'button-primary').href
puts href[/handle=([^&]+)/, 1]
#=> "Annie5170"
parent_div.link(:class => "quickview").click
sleep (2)
browser.link(:class => "icon dialog-abandon").click
sleep (2)
end
это должно быть добавлено в код.
browser.link(:title => 'Quick view', :index=> n).click
теперь все работает нормально.