gpt4 book ai didi

javascript - 如何在 node js 中使用 puppeteer 滚动页面 5 分钟(如果之前完成则更短)?

转载 作者:行者123 更新时间:2023-11-30 14:10:09 30 4
gpt4 key购买 nike

如何在 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/

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