You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Watir抓取部分隐藏列表中4600个元素的技术求助

解决滚动加载页面的数据抓取问题

看起来你遇到的核心问题是滚动加载的动态内容无法抓取,加上当前的元素定位和遍历逻辑有问题,导致连初始数据都抓不到。我来一步步帮你解决:

1. 先搞定滚动加载:让所有4600个元素都加载出来

这类动态加载的页面,必须模拟用户滚动行为,直到页面不再加载新内容。你可以用Watir执行JS脚本滚动到底部,循环判断元素数量是否停止增长:

def scroll_to_load_all(browser, item_selector)
  previous_item_count = 0
  loop do
    # 执行JS滚动到页面底部
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待页面加载(时间可以根据实际加载速度调整,或者用更智能的等待)
    browser.wait_until { browser.elements(css: item_selector).count > previous_item_count } rescue break
    current_count = browser.elements(css: item_selector).count
    # 如果元素数量不再变化,说明所有内容都加载完了
    break if current_count == previous_item_count
    previous_item_count = current_count
    puts "已加载 #{current_count} 个元素..."
  end
end

2. 修正元素定位与数据提取逻辑

你当前的代码browser.th(...)用错了标签(th是表格表头标签,不是列表项),而且只尝试抓取单个元素,没有遍历所有项。根据你描述的结构,应该先定位到所有列表项,再逐个提取title和href:

# 替换成你实际的列表项选择器(用浏览器开发者工具确认类名组合)
list_item_selector = "._9irns._pg23k._jpwof._gvoze"

# 先滚动加载所有元素
scroll_to_load_all(browser, list_item_selector)

# 遍历所有列表项,提取目标数据
browser.elements(css: list_item_selector).each_with_index do |item, index|
  begin
    # 提取href(假设链接是列表项内的a标签)
    item_href = item.link.href
    # 提取title(根据实际结构调整,比如是span的文本,或者元素的title属性)
    item_title = item.text.strip # 如果title在某个子span里,改成item.span.text.strip
    puts "#{index+1}. 标题:#{item_title} | 链接:#{item_href}"
  rescue StandardError => e
    puts "#{index+1}. 元素解析失败:#{e.message}"
    next
  end
end

3. 你当前代码的问题分析

  • 标签错误:th是表格表头,你的列表项应该是div、li这类标签,直接用类选择器定位更可靠。
  • 未遍历元素:.th(...)只会返回第一个匹配的元素,要抓所有元素得用.elements(...)然后遍历。
  • 未处理滚动加载:初始页面只加载可见元素,不滚动的话后面的4000+元素根本没渲染,自然抓不到。

额外注意事项

  • 调整等待逻辑:如果页面加载慢,wait_until比固定sleep更可靠,能避免过早判断加载完成。
  • 验证选择器:用浏览器开发者工具的"检查元素"功能,复制列表项的CSS选择器,确保和代码里的一致。
  • 处理异常:有些元素可能结构异常,加rescue能避免单个元素出错导致整个脚本中断。

内容的提问来源于stack exchange,提问作者ahmed elbarky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:39:35