有没有办法在移动网站上向下滚动或触发无限滚动加载?

Is there a way to scroll down or trigger infinite scroll loading on mobile web site?

我一直在寻找向下滚动移动网站的方法。 这是我要抓取的 url 示例:

https://m.place.naver.com/place/list?query=%EC%84%B1%EC%88%98%EB%8F%99%20%EA%B7%BC%EC%B2%98%20%EB%8C%80%ED%98%95%EB%A7%88%ED%8A%B8&x=127.04965&y=37.542108&start=501&display=300&adult=true&spq=false&highlight=true&sessionId=bch8Eyf4fKKe0ppVJkHJKg%3D%3D&sortingOrder=distance&level=top

如您所见,它里面没有滚动条,初始加载时只显示 50 个结果。我试过了

y = driver.find_elements_by_xpath("//li[@class='_387oy']")
print(len(y))
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
print(len(y))

但是没用。它显示 execute_script.

之前和之后的 50 个结果

您可能已经猜到,这个url确实有PC版,但没有我需要的数据。只有在移动版本中,我可以在 url 参数中设置 GPS 坐标,因此它会计算并返回与坐标距离的结果。所以...我想我应该在这个移动网站上工作。

但是正如我已经告诉过你的,我无法向下滚动所有数据。而且我不擅长 JS,所以我不确定是否有与其他 execute_script 一起工作的方法,它可以允许在您向下滚动到底部时触发加载更多数据,或者只一次显示所有数据.

仅供参考,在 url 参数中,它确实有一个参数 "display" 和 "start" 但我不知道它们是如何工作的。当我将显示从 30 更改为 300 或 30000 时,结果没有任何变化。

如果有人可以分享一些解决方法的知识,那将非常有帮助。提前致谢!

您需要使用此参数滚动到最后一个元素:arguments[0].scrollIntoView(true);

使用 [-1] 获取列表中的最后一个元素。

滚动后,再次初始化您的元素以获得新的大小。

y = driver.find_elements_by_xpath("//li[@class='_387oy']")
print(len(y))
last_el = y[-1]
driver.execute_script("arguments[0].scrollIntoView(true);", last_el)
time.sleep(5)
y = driver.find_elements_by_xpath("//li[@class='_387oy']")
print(len(y))

最好的方法是使用循环。