这就是CSS的样子
<ul class="offers general">
<li class="offer ">
<div id="offer-detail-384" class="hide" style="display:none">
<div> Text I want to scrape is here </div>
我已成功网络抓取其他网站,但有了这个,它给我回复,我在页面上找不到任何地方。这是一个包含产品列表的网站,我正在收回一些我在网站上找不到的产品清单。这真奇怪......
代码是
@browser = Watir::Browser.new:phantomjs
@browser.goto "https://Groceries.com/offers"
@products = @browser.lis(class: "offer")
@products.each do |x|
Groceries.create(title: x.divs[13].text, value:
x.divs[14].text)
end
因此,当我尝试检索数据时,我会得到像Nutrigrain酒吧这样的项目,什么不是,但当我只是看看我正在抓取的网站时,在页面的任何地方都没有找到Nutrigrain栏。我已经仔细检查了链接,我已经在网上抓了其他网站,所以我有点想法怎么做..
答案 0 :(得分:0)
如果我正确理解您的问题,请尝试使用CSS选择器专门排除hide
类:
@browser.div(css: ':not(.hide)')
我不确定CSS选择器支持在webdriver中有多完整。如果这不起作用,这里的a SO question可能还有其他方法可以做同样的事情。
修改:这是另一个选项,旨在选择不包含隐藏li
元素的div
元素:
@browser.element( :xpath, '//li[not(div/@class="hide")]' )
答案 1 :(得分:0)
Element#text
应该只返回页面上显示的内容,因此您不应该获得实际上看不到的结果。当提供的代码不真实时,很难复制。也许你可以尝试这样的事情:
@products = browser.div(id: /offer-detail-\d+/, visible: true).each do |x|
divs = x.divs # only one wire call
Groceries.create(title: divs[13].text, value: divs[14].text)
end
答案 2 :(得分:-1)
向div添加一个类可以做到这一点
HTML `
<li class="offer ">
<div id="offer-detail-384" class="hide" style="display:none">
<div class="scrape"> Text I want to scrape is here </div>`
CSS
.scrape {display: block!important;}