【发布时间】:2021-11-10 00:00:10
【问题描述】:
我正在尝试使用 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 python-3.x playwright