gpt4 book ai didi

javascript - 编剧自动滚动到无限滚动页面底部

转载 作者:行者123 更新时间:2023-12-05 00:30:31 25 4
gpt4 key购买 nike

我正在尝试使用 Python 和 Playwright 自动抓取具有“无限滚动”的网站。
问题是 Playwright 到目前为止还不包括滚动功能,更不用说无限的自动滚动功能了。
根据我在网上找到的信息和我的个人测试,我可以使用 page.evaluate() 自动执行无限或有限滚动。函数和一些 Javascript 代码。
例如,这有效:

for i in range(20):
page.evaluate('var div = document.getElementsByClassName("comment-container")[0];div.scrollTop = div.scrollHeight')
page.wait_for_timeout(500)
这种方法的问题在于,它要么通过指定滚动数量来工作,要么通过 while True 告诉它永远继续下去。环形。
我需要找到一种方法来告诉它继续滚动直到最终内容加载。
这是我目前在 page.evaluate() 中尝试的 Javascript :
var intervalID = setInterval(function() {
var scrollingElement = (document.scrollingElement || document.body);
scrollingElement.scrollTop = scrollingElement.scrollHeight;
console.log('fail')
}, 1000);
var anotherID = setInterval(function() {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
clearInterval(intervalID);
}}, 1000)
这在我的 firefox 浏览器或 Playwright firefox 浏览器中都不起作用。它立即返回并且不会间隔执行代码。
如果有人能告诉我如何使用 Playwright 创建一个自动滚动功能,该功能将在它到达动态加载网页的底部时检测并停止,我将不胜感激。

最佳答案

所以我找到了一个可行的解决方案。
我所做的是将 Javascript 与 python Playwright 代码结合起来。
我使用 200 毫秒的计时器启动 setInterval 以在页面上向下滚动 page.evaluate()然后我用一个python循环跟进它,每秒检查页面的总高度(包括滚动)是否发生了变化。如果它改变了,它会继续滚动,如果它没有改变,那么滚动就结束了。
这是它的样子:

page.evaluate(
"""
var intervalID = setInterval(function () {
var scrollingElement = (document.scrollingElement || document.body);
scrollingElement.scrollTop = scrollingElement.scrollHeight;
}, 200);

"""
)
prev_height = None
while True:
curr_height = page.evaluate('(window.innerHeight + window.scrollY)')
if not prev_height:
prev_height = curr_height
time.sleep(1)
elif prev_height == curr_height:
page.evaluate('clearInterval(intervalID)')
break
else:
prev_height = curr_height
time.sleep(1)

关于javascript - 编剧自动滚动到无限滚动页面底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69183922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com