我如何可以滚动5分钟(或如果它之前完成以下)与节点JS的木偶页?
我如何可以滚动页面5分钟,在节点JS使用的木偶(或更少,如果页面完成滚动)?我只能让页面滚动,直到它到达页面的结尾,但是我想等仅5分钟或更少,如果滚动前5分钟完成。我使用的代码如下:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.goto('');
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);
}