【问题标题】:Nokogiri: how to find the selected option of <select> when select="selected" does not existNokogiri:当select =“selected”不存在时如何找到<select>的选定选项
【发布时间】:2018-04-07 08:46:30
【问题描述】:

我是 Nokogiri 的新手,需要找到下面代码的选定选项。在下面复制/粘贴时,粉红色是选择的选项,但 HTML 中没有任何内容表明这一点。

现在我以前使用过:page.at('select[name="Color"] option:not(:first-of-type)[@selected]').text(类似的方法可以在这里找到:Nokogiri: how to find the selected option of <select>?)来查找所选选项的值,但是对于我试图抓取的这个特定站点,没有@ 987654323@.

在过去使用 jQuery 进行抓取时,我使用了 $('select').children("option:not(:first-of-type)").filter(":selected").text();,它设法绕过了这个问题,但是在 Nokogiri 中添加一个 CSS 选择器,比如 page.at(".variation-trait[aria-label='Select Color'] option:selected").text 对我来说也没有效果。

任何帮助将不胜感激。

 <select class="variation-trait" aria-label="Select Color" id="trait-0" data-bhw="VariationsTrait:color" data-bhw-path="FeaturedDeal|deal:73dcb228-e425-11e7-bf04-00259060b5da|VariationsWidget|success:variations-displayed|VariationsTrait:color">
     <option class="variation-option" value="Select Color" id="trait-0-0" data-bhc="option:select-color">
          Select Color
     </option>
     <option class="variation-option force-display" value="Black" id="trait-0-1" data-bhc="option:black" disabled="disabled"><span class="sold-out-text">(SOLD OUT)</span>
          Black
     </option>
     <option class="variation-option" value="White" id="trait-0-2" data-bhc="option:white">
          White
      </option>
      <option class="variation-option" value="Blue" id="trait-0-3" data-bhc="option:blue">
          Blue
      </option>
      <option class="variation-option" value="Gray" id="trait-0-4" data-bhc="option:gray">
          Gray
      </option>
      <option class="variation-option" value="Pink" id="trait-0-5" data-bhc="option:pink">
          Pink
      </option>
 </select>

【问题讨论】:

    标签: ruby nokogiri


    【解决方案1】:

    如果没有[selected]选项,那么就是第一个,所以:

    page.at('option[selected]') || page.at('option')
    

    【讨论】:

    • page.at('option') 总是按原样返回
    • 对,如果page.at('option[selected]') 为空,那么您需要第一个选项。对吗?
    • 不完全是。我想要用户选择的任何类型,但第一个类型(因为“选择颜色”的值对我来说是无用的数据)。我只是想看看是否有办法获得选定的选项。如果它有帮助,它就是这个页面:groupon.com/deals/…
    • 第一个选择的选项是page.at('option[selected]')
    • 虽然就像我说的那样,我不想要第一个选择的选项,除非在 HTML 中存在 selected 属性,否则它仍然不起作用,但它不存在。我假设 Nokogiri 不可能做到这一点,因为 HTML 中不存在该属性,而这正是 Nokogiri 成功抓取所需的。我只是想知道是否有人知道/知道这个问题的解决方案,这对我来说在抓取网站时很常见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2013-10-10
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多