如何获取数组中的每个div元素ID并包含我需要的特定字符串,其中包含元素子类theText。
<div id="corporaContainer" class="fullList">
<div id="c-ff7c1098-8183-4c89-b3ec-b2587aa6d372" class="resItem clearfix">
<div class="resTitle">
<span id="filter-ready" class="statBall statFile ready" title="Status: ready"></span>
<span class="theText"></span>
</div>
<div class="resType"></div>
<div class="resSize"></div>
<div class="resPermission public"></div>
<div class="resDomain"></div>
<div class="resDescr"></div>
<div class="resDetails clearfix" style="display:none;"></div>
我试图在每个ID上创建一个循环数组并检查.include?功能。 但迄今为止没有成功。
我需要脚本跳过每个div元素并检查它是否包含我需要的字符串,然后将元素ID值存储在数组中以便稍后使用此ID。
添加了我目前制作的脚本代码。
@b = Watir::Browser.new :chrome, :switches => %w[--disable-plugins --ignore-certificate-errors --disable-popup-blocking --disable-translate --disable-translate]
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
require_relative "1_login.rb"
# Ieiet Corpora sadaļā
@b.div(:id, "pageHeader").link(:text, "Corpora").click
lietotajs = @b.div(:class, "userRealName").text
dzesamie_korpusi = @b.div(:id, "corporaContainer", :class => "fullList")
korpusu_id = []
dzesamie_korpusi.each do |korpuss|
id = korpuss.attribute_value "id"
id = id[-38..-1]
korpusu_id.push(id)
end
我到目前为止尝试过脚本循环通过corporacontainer下的每个DIV元素并获取div元素id以将ir存储在数组中,但是这个确切的代码会返回一个错误,使得它期望Hash标记或者如何处理它现在
答案 0 :(得分:0)
我了解到,对于包含div
后代节点id=corporaContainer
的每个div
子节点,您正在查找span
个根class="theText"
id
}。并且您希望获得那些div
子节点的nokogiri
。为此,我使用file.html
解析HTML / XML / CSS文档。
<div id="corporaContainer" class="fullList">
<div id="c-ff7c1098-8183-4c89-b3ec-b2587aa6d372" class="resItem clearfix">
<div class="resTitle">
<span id="filter-ready" class="statBall statFile ready" title="Status: ready"></span>
<span class="theText"></span>
</div>
<div class="resType"></div>
<div class="resSize"></div>
<div class="resPermission public"></div>
<div class="resDomain"></div>
<div class="resDescr"></div>
<div class="resDetails clearfix" style="display:none;"></div>
</div>
<div id="c-e5f0fe33-06a0-4685-8fe2-f789893bd8e2" class="resItem>clearfix"></div>
</div>
require 'nokogiri'
root_id = 'corporaContainer'
filter = 'theText'
File.open('file.html') do |file|
nodes = Nokogiri::HTML(file)
nodes.xpath("//div[@id=\"#{root_id}\"]/div").each do |node|
puts node['id'] unless node.xpath(".//span[@class=\"#{filter}\"]").empty?
end
end
脚本
c-ff7c1098-8183-4c89-b3ec-b2587aa6d372
结果,您拥有正在寻找的ID
{{1}}
答案 1 :(得分:0)
当你说'一个字符串'时,你不希望这个已知文本出现在哪里。如果您正在查找div中某处的文本(请注意页面上的“文本”和可见(通常)中的文本..不是元素定义中的字符或元素的某些属性的值)
browser.div(:id => "corporaContainer").divs(:text => /TestAuto\s.*/).each do |div|
puts div.attribute_value("id")
end
如果已知的东西是属性的值,并且属性名称是常量,类似于span的类,并且span总是嵌套在具有您想要的ID的容器对象下面的某个可预测级别的容器对象中,那么这样的事情可能有用(我没有简单的方法来测试,所以试试自己,看看你是否得到了你想要的东西)
browser.div(:id => "corporaContainer").spans(:class => /TestAuto\s.*/).each do |span|
puts span.parent.parent.attribute_value("id")
end