首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby一直到循环结束太快

Ruby一直到循环结束太快
EN

Stack Overflow用户
提问于 2022-10-06 20:27:56
回答 1查看 64关注 0票数 2

我使用Watir从一个具有无限滚动的页面收集所有项目。创建了一个“直到”循环,该循环计数“前”状态中的项目数,滚动到页面底部并计算新的项目数。

它应该运行,直到所有的项目被捕获,但它只停止在一个滚动。

我做错了什么?

代码语言:javascript
复制
browser.goto 'https://bubble.io/plugins'
old_app_as = ['a']
new_app_as = ['b', 'c']

until old_app_as.count == new_app_as.count
  old_app_as = browser.divs(class: 'rows')[1].as
  browser.scroll.to [0, 999999999]
  sleep(10)
  new_app_as = browser.divs(class: 'rows')[1].as
end
EN

回答 1

Stack Overflow用户

发布于 2022-10-08 01:49:13

问题是ElementCollections在使用Enumerable方法时重新定位元素。您可以在Watir码中看到这个

代码语言:javascript
复制
def each(&blk)
  reset!
  to_a.each(&blk)
end

这意味着在until old_app_as.count == new_app_as.count

  1. old_app_as将重新定位集合,找到当前可用的链接,它将找到40 (即额外加载的页面)。
  2. new_app_as还将重新定位当前可用的链接,它将找到相同的40个链接。
  3. 这两个值是相同的,因此循环退出。

您需要以一种不会每次重新定位的方式存储old_app_asnew_app_as。我认为最简单的解决方案是使用Array将它们转换为#to_a

代码语言:javascript
复制
until old_app_as.count == new_app_as.count
  old_app_as = browser.divs(class: 'rows')[1].as.to_a
  browser.scroll.to [0, 999999999]
  sleep(10)
  new_app_as = browser.divs(class: 'rows')[1].as.to_a
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73979692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档