<div class="wrapper">
<div id="minHeightBlock" style="min-height: 430px;">
<div class="borderbox"><div class="standaloneBox">
<div class="sysHeaderContainer clearfix"> … </div>
<div class="notesForGuests"> … </div>
<div class="filterBox clearfix"> … </div>
<div class="resListHeader"> … </div>
<div id="corporaContainer" class="fullList">
<div id="c-a06ffa6a-dc62-4640-9760-dbd661c7ffe8" class="resItem clearfix">
<div class="resTitle">
<span id="filter-empty" class="statBall statFile empty" title="Status: Empty corpus"></span>
<span class="theText">
12321 corpora
</span>
</div>
<div class="resType"> … </div>
<div class="resSize"> … </div>
<div class="resPermission private"> … </div>
<div class="resDomain"> … </div>
<div class="resDescr"> … </div>
<div class="resDetails clearfix" style="display:none;"> … </div>
</div>
<div id="c-b8c0faba-e662-4998-836f-0ee58009b7fa" class="resItem clearfix"> … </div>
<div id="c-9d02b887-4835-4606-ad4b-775b39af9f48" class="resItem clearfix"> … </div>
<div id="c-021d3ba1-db03-4c4e-81a5-294737eb5b54" class="resItem clearfix"> … </div>
这是我尝试使用Watir编写脚本的网页代码。我所知道的只是元素应包含的跨度文本。我有很多这些元素,我需要收集所有元素ID值,以便我可以在进一步的操作中使用它们。
我已经在上面的代码中记录了我所知道的以及我需要得到的东西。
到目前为止,我已尝试过此代码:
@b.div(:id, "pageHeader").link(:text, "Corpora").click
sleep 5
@b.div(:id, "corporaContainer").spans(:text => /TestAuto\s.*/).each do |span|
puts span.parent.attribute_value("id")
end
但没有完成输出。也许我做错了什么。帮我把这个坚果壳破了。
答案 0 :(得分:1)
你的尝试很接近。问题是span.parent
仅上升到<div class="resTitle">
。你需要再多上一个父母:
@b.div(:id, "corporaContainer").spans(:text => /corpora/).each do |span|
puts span.parent.parent.attribute_value("id")
end
(请注意,我更改了spans
定位器中的文字,因为TestAuto\s.*
与示例html不匹配。)
或者,我有时会发现找到包含span的div更好。这样您就不必担心父母的变化数量了:
p @b.divs(:class => 'resItem')
.find_all { |div| div.span(:text => /corpora/).exists? }
.collect { |div| div.id }
#=> ["c-a06ffa6a-dc62-4640-9760-dbd661c7ffe8"]
以下是一个工作示例。请注意,有两件重要的事情:
sleep(5)
可能会有效,但您最好使用实际的等待方法(因为它似乎需要超过5秒)。示例:
require 'watir-webdriver'
# Title to search for:
title_text = /UniAdm/
# Go to the Corpora page:
@b = Watir::Browser.new :ff
@b.goto "https://www.letsmt.eu/Corpora.aspx"
# Wait for the results to load:
container = @b.div(:id, "corporaContainer")
container.div(:class => 'resItem').wait_until_present
# Find the matching ids:
p container.divs(:class => 'resItem')
.find_all { |div| div.span(:class => 'theText', :text => title_text).exists? }
.collect { |div| div.id }
#=> ["c-87ee80a9-e529-48b2-92be-bc8d76375478", "c-f139e781-4789-41f9-82e8-914e0e3eff81", "c-e17641d2-9364-4e87-9047-ba35580dc32f"]