我使用Watir从一个具有无限滚动的页面收集所有项目。创建了一个“直到”循环,该循环计数“前”状态中的项目数,滚动到页面底部并计算新的项目数。
它应该运行,直到所有的项目被捕获,但它只停止在一个滚动。
我做错了什么?
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发布于 2022-10-08 01:49:13
问题是ElementCollections在使用Enumerable方法时重新定位元素。您可以在Watir码中看到这个
def each(&blk)
reset!
to_a.each(&blk)
end这意味着在until old_app_as.count == new_app_as.count中
old_app_as将重新定位集合,找到当前可用的链接,它将找到40 (即额外加载的页面)。new_app_as还将重新定位当前可用的链接,它将找到相同的40个链接。您需要以一种不会每次重新定位的方式存储old_app_as和new_app_as。我认为最简单的解决方案是使用Array将它们转换为#to_a。
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
endhttps://stackoverflow.com/questions/73979692
复制相似问题