我正在尝试滚动自动加载页面,并且在这样做的时候我想获取显示的(和消失的元素)。
我的代码看起来像那样,滚动效果很好,但是我无法使人偶代码起作用以检测元素并保存其值(该代码确实在滚动功能之外起作用)
async function autoScroll(page) {
await page.evaluate(async () => {
await new Promise((resolve, reject) => {
let totalHeight = 0;
let distance = 100;
let timer = setInterval(async () => {
let scrollHeight = document.body.scrollHeight;
window.scrollBy(0, distance);
totalHeight += distance;
console.log("scrolling"); // That one never shows up
await getUsers(); // Trying to fetch elements on every scroll
if (totalHeight >= scrollHeight) {
clearInterval(timer);
resolve();
}
}, 100);
});
});
}
async function getUsers() {
let hrefs = await page.$$('div > a');
for (let i = 0; i < hrefs.length; i = i++) { adding each link to database }
-我要实现的是,每次我滚动到页面底部时,getUsers函数将获取spesific div中的所有链接,如果它们尚不存在,则将它们添加到数据库中,但是从SetInterval调用函数似乎不起作用
在滚动页面时,如何包括我的伪造者异步功能?
答案 0 :(得分:0)
代码确实在滚动功能之外起作用
getUsers
函数是在主node.js脚本中定义的,但是在autoScroll
中它是在page.evaluate
函数中使用的,而page.evaluate
中的代码是在没有getUsers
函数的浏览器上下文(就像我们在DevTools控制台中运行)。
由于getUsers
与数据库一起使用,因此只能在node.js上使用,而不能在page.evaluate
中使用,因此您应该重写抓取代码。
我建议先将userdata放入page.evaluate中,只有在页面不再滚动后,才将数据返回到主上下文,然后保存到数据库中。
console.log
中的 page.evaluate
。