我正在使用Watir从一个无限滚动的页面中收集所有项目。创建了一个Until循环,该循环计算处于“BEFORE”状态的项目数,滚动到页面底部并计算新的项目数。
它应该运行,直到所有项目都被捕获,但它只在一个滚动后停止。
我做错了什么?
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
1条答案
按热度按时间acruukt91#
问题是在使用
Enumerable
方法时,ElementCollections
会重新定位元素。您可以在Watir代码中看到这一点:这意味着在
until old_app_as.count == new_app_as.count
中:1.
old_app_as
将重新定位集合查找当前可用的链接,它将找到40个链接(即具有额外加载的页面)。1.
new_app_as
还将重新定位当前可用的链接,它将找到相同的40个链接。1.这两个值相同,因此循环退出。
您需要以不会每次都重新定位的方式存储
old_app_as
和new_app_as
。我认为最简单的解决方案是使用#to_a
将它们转换为Array
: