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

Ruby until循环提前终止:Watir采集无限滚动页面内容遇问题

问题分析与修复方案

你的循环仅执行一次就停止,核心问题是循环内的变量赋值逻辑错误,同时滚动和等待的方式也不够可靠,具体问题和修复如下:

1. 核心逻辑错误

你在循环开始时直接将old_app_as重新赋值为当前页面的元素集合,而非继承上一次循环结束后的new_app_as值。第一次循环执行后,old_app_as和new_app_as会指向同一元素集合,导致两者数量相等,循环直接终止。

2. 修复后的代码

browser.goto 'https://bubble.io/plugins'

# 初始化:获取初始条目集合
old_app_as = browser.divs(class: 'rows')[1].as
loop do
  # 滚动到当前最后一个条目底部,触发加载
  old_app_as.last.scroll.to :bottom if old_app_as.any?
  # 等待新元素加载,替代固定sleep更可靠
  Watir::Wait.until { browser.divs(class: 'rows')[1].as.count > old_app_as.count }
  new_app_as = browser.divs(class: 'rows')[1].as
  # 数量不再增加则退出循环
  break if new_app_as.count == old_app_as.count
  # 更新旧集合为最新值,准备下一轮循环
  old_app_as = new_app_as
end

3. 关键优化点

  • 变量传递逻辑:每次循环结束后将new_app_as赋值给old_app_as,确保前后数量对比有效
  • 滚动方式:滚动到当前最后一个条目底部,比固定大数值更精准,避免无效滚动
  • 等待方式:用Watir的Wait.until等待元素数量增加,替代固定sleep,既节省时间又能确保元素加载完成
  • 循环结构:改用loop do...break结构,逻辑更清晰,避免初始值设置的混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:55:21