-2

如何获取数组中的每个 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 标记或现在如何处理它。

4

2 回答 2

0

当您说“字符串”时,您希望这个已知文本出现在哪里有点不清楚。如果您正在查找 div 中某处的文本(请注意“文本”在页面上(通常)可见。不是元素定义中的字符或元素的某些属性的值)

browser.div(:id => "corporaContainer").divs(:text => /TestAuto\s.*/).each do |div|
  puts div.attribute_value("id")
end

如果已知的东西是一个属性的值,并且属性名称是常量,类似于跨度的类,并且跨度总是嵌套在具有您想要的 ID 的容器对象之下的一些可预测级别的容器对象中,那么像这样可能会起作用(我没有简单的方法来测试,所以自己尝试一下,看看你是否得到了你想要的)

browser.div(:id => "corporaContainer").spans(:class => /TestAuto\s.*/).each do |span|
  puts span.parent.parent.attribute_value("id")
end
于 2013-03-27T16:48:15.583 回答
0

我知道您正在为每个包含后代节点的子节点div查找根。你想得到那些子节点的。为此,我会使用它来解析 HTML/XML/CSS 文档。id=corporaContainerdivspanclass="theText"iddivnokogiri

file.html

<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

结果,您拥有了您正在寻找的 id

c-ff7c1098-8183-4c89-b3ec-b2587aa6d372
于 2013-03-27T09:41:05.693 回答