gpt4 book ai didi

ruby - Nokogiri 选择 last-1 选项值

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:35 25 4
gpt4 key购买 nike

我有以下 HTML:

<select name="ctl00$cp$cbDzien" id="ctl00_cp_cbDzien" onchange="cbDzienGodzina_onChange(this);" style="width:200px;">
<option value="-1"></option>
<option value="2013-10-07">2013-10-07</option>
<option value="2013-10-08">2013-10-08</option>
<option value="2013-10-09">2013-10-09</option>
<option value="2013-10-10">2013-10-10</option>
<option value="2013-10-11">2013-10-11</option>
<option value="2013-10-14">2013-10-14</option>
<option value="2013-10-15">2013-10-15</option>
<option value="2013-10-16">2013-10-16</option>
<option value="2013-10-17">2013-10-17</option>
<option value="2013-10-18">2013-10-18</option>
<option value="2013-10-23">2013-10-23</option>
<option value="2013-10-24">2013-10-24</option>
<option value="2013-10-25">2013-10-25</option>
<option value="2013-10-28">2013-10-28</option>
<option value="2013-10-29">2013-10-29</option>
<option value="2013-10-31">2013-10-31</option>
</select>

我的代码:

@get_doc = Nokogiri::HTML(page)
@get_doc .at_css("select#ctl00_cp_cbDzien").each do |d|
puts d[value]
end

但是,我没有看到带有此类代码的选项,而且我还需要在我的示例中选择 last-1 值 (2013-10-29)。我该怎么做?

最佳答案

您没有根据需要编写代码。在这里:

require 'nokogiri'

doc = Nokogiri::HTML.parse <<-eot
<select name="ctl00$cp$cbDzien" id="ctl00_cp_cbDzien" onchange="cbDzienGodzina_onChange(this);" style="width:200px;">
<option value="-1"></option>
<option value="2013-10-07">2013-10-07</option>
<option value="2013-10-08">2013-10-08</option>
<option value="2013-10-09">2013-10-09</option>
<option value="2013-10-10">2013-10-10</option>
<option value="2013-10-11">2013-10-11</option>
<option value="2013-10-14">2013-10-14</option>
<option value="2013-10-15">2013-10-15</option>
<option value="2013-10-16">2013-10-16</option>
<option value="2013-10-17">2013-10-17</option>
<option value="2013-10-18">2013-10-18</option>
<option value="2013-10-23">2013-10-23</option>
<option value="2013-10-24">2013-10-24</option>
<option value="2013-10-25">2013-10-25</option>
<option value="2013-10-28">2013-10-28</option>
<option value="2013-10-29">2013-10-29</option>
<option value="2013-10-31">2013-10-31</option>

</select>
eot

doc.css('#ctl00_cp_cbDzien option').each do |node|
puts node['value']
end
# >> -1
# >> 2013-10-07
# >> 2013-10-08
# >> 2013-10-09
# >> 2013-10-10
# >> 2013-10-11
# >> 2013-10-14
# >> 2013-10-15
# >> 2013-10-16
# >> 2013-10-17
# >> 2013-10-18
# >> 2013-10-23
# >> 2013-10-24
# >> 2013-10-25
# >> 2013-10-28
# >> 2013-10-29
# >> 2013-10-31

要获得你需要做的最后一个值:

doc.css('#ctl00_cp_cbDzien option').last['value']
# => "2013-10-31"

要获取倒数第二个值,您需要执行以下操作:

doc.css('#ctl00_cp_cbDzien option')[-2]['value']
# => "2013-10-29"

现在看看,为什么您的代码没有打印出您预期的结果。

doc.css('#ctl00_cp_cbDzien').size
# => 1
doc.css('#ctl00_cp_cbDzien')[0].name
# => "select"

doc.css('#ctl00_cp_cbDzien') 会给你 Nokogiri::XML::NodeSet只有一个Nokogiri::XML::Node ,这是你的 select 元素。现在要获取所有 option 元素的 Nokogiri::XML::NodeSet,你需要更改选择器规则如下:

doc.css('#ctl00_cp_cbDzien option').size
# => 17
doc.css('#ctl00_cp_cbDzien option').all?{|nd| nd.name == 'option'}
# => true

上面的 true 值表明 Nokogiri::XML::NodeSetdoc.css('#ctl00_cp_cbDzien option'),包含作为 Nokogiri::XML::Node 的所有选项元素。

可以使用 at_css 编写好的一行或 at_xpath如下:

doc.at_css('#ctl00_cp_cbDzien option:nth-last-child(2)')['value']
# => "2013-10-29"
doc.at_xpath("//select[@id='ctl00_cp_cbDzien']/option[last()-1]")['value']
# => "2013-10-29"

关于ruby - Nokogiri 选择 last-1 选项值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19201376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com