是否可以向下滚动或触发移动网站上的无限滚动加载?

问题描述 投票:0回答:1

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

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配合使用,当您向下滚动至底部时,可以允许触发器加载更多数据,或者一次显示所有数据。

FYI,在url参数中,确实有一个参数“ display”和“ start”,但我不知道它们如何工作。当我将显示从30更改为300或30000时,结果没有任何更改。

如果任何人都可以分享一些解决方法的知识,将非常有帮助。预先谢谢!

python-3.x selenium infinite-scroll mobile-website
1个回答
0
投票

您需要使用此参数滚动到最后一个元素: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))

最好的方法是使用循环。

© www.soinside.com 2019 - 2024. All rights reserved.