如何在 node js 中使用 puppeteer 滚动页面 5 分钟(如果页面完成滚动则更短)?我只能让页面滚动到页面末尾,但如果滚动在 5 分钟前完成,我只想等待 5 分钟或更短时间。我使用的代码如下:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.goto('https://twitter.com/Avengers');
await page.setViewport({
width: 1200,
height: 800
});
await autoScroll(page);
})();
async function autoScroll(page){
await page.evaluate(async () => {
await new Promise((resolve, reject) => {
var totalHeight = 0;
var distance = 100;
var timer = setInterval(() => {
var scrollHeight = document.body.scrollHeight;
window.scrollBy(0, distance);
totalHeight += distance;
if(totalHeight >= scrollHeight){
clearInterval(timer);
resolve();
}
}, 120);
});
});
}
最佳答案
在主函数中,我们将定义何时退出:
(async () => {
// ...
let finishTime = new Date().getTime() + (5 * 60 * 1000);
await autoScroll(page, finishTime);
// ...
})();
然后将其传递给 page.evaluate
:
async function autoScroll(page, finishTime){
await page.evaluate(async (finishTime) => {
await new Promise((resolve, reject) => {
var totalHeight = 0;
var distance = 100;
var timer = setInterval(() => {
var scrollHeight = document.body.scrollHeight;
window.scrollBy(0, distance);
totalHeight += distance;
if(totalHeight >= scrollHeight || new Date().getTime() > finishTime){
clearInterval(timer);
resolve();
}
}, 120);
});
}, finishTime);
}
关于javascript - 如何在 node js 中使用 puppeteer 滚动页面 5 分钟(如果之前完成则更短)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54613567/