当条件为真(?)
Promise is not revolved when the condition it's true (?)
我无法理解为什么在条件为真时未解决承诺。就我而言,我正在与 Puppeteer 合作,我正在尝试向下滚动以收取更多 google 评论。我 select 所有容器子项和评论总数。这是相同的数字,但似乎那个条件不是真的。我什么都不懂...
我的代码:
console.log('he entrado');
await page.evaluate(() => new Promise((resolve) => {
const scroller = document.querySelector('.review-dialog-list');
const totalChilds = document.querySelectorAll('.gws-localreviews__general-reviews-block > *').length;
const totalReviews = document.querySelector('.z5jxId').innerText.slice(0, -8);
if(totalChilds != totalReviews){
var timer = setInterval(() => {
scroller.scrollBy(0, 400);
}, 100);
}else{
clearInterval(timer);
resolve();
}
}));
console.log('he salido');
我可以看到带有消息 'He entrado' 的 console.log,但它从未向我显示 'He salido'。我对滚动条没有任何问题,我检查了浏览器控制台中的 select 或两者具有相同的值。
如果有人可以帮助我或向我解释为什么我的代码失败,我将不胜感激。希望你能理解我,如果不理解,请告诉我,我会附加更多细节。非常感谢!
您仅在 page.evaluate
首次运行时检索 scroller
、totalChilds
和 totalReviews
。您应该在每次滚动时检索它们。
await page.evaluate(() => new Promise((resolve) => {
const scroller = document.querySelector('.review-dialog-list');
const timer = setInterval(() => {
const totalChilds = document.querySelectorAll('.gws-localreviews__general-reviews-block > *').length;
const totalReviews = document.querySelector('.z5jxId').innerText.slice(0, -8);
if (totalChilds === totalReviews) {
clearInterval(timer);
resolve();
}
scroller.scrollBy(0, 400);
}, 100);
}));
我无法理解为什么在条件为真时未解决承诺。就我而言,我正在与 Puppeteer 合作,我正在尝试向下滚动以收取更多 google 评论。我 select 所有容器子项和评论总数。这是相同的数字,但似乎那个条件不是真的。我什么都不懂...
我的代码:
console.log('he entrado');
await page.evaluate(() => new Promise((resolve) => {
const scroller = document.querySelector('.review-dialog-list');
const totalChilds = document.querySelectorAll('.gws-localreviews__general-reviews-block > *').length;
const totalReviews = document.querySelector('.z5jxId').innerText.slice(0, -8);
if(totalChilds != totalReviews){
var timer = setInterval(() => {
scroller.scrollBy(0, 400);
}, 100);
}else{
clearInterval(timer);
resolve();
}
}));
console.log('he salido');
我可以看到带有消息 'He entrado' 的 console.log,但它从未向我显示 'He salido'。我对滚动条没有任何问题,我检查了浏览器控制台中的 select 或两者具有相同的值。
如果有人可以帮助我或向我解释为什么我的代码失败,我将不胜感激。希望你能理解我,如果不理解,请告诉我,我会附加更多细节。非常感谢!
您仅在 page.evaluate
首次运行时检索 scroller
、totalChilds
和 totalReviews
。您应该在每次滚动时检索它们。
await page.evaluate(() => new Promise((resolve) => {
const scroller = document.querySelector('.review-dialog-list');
const timer = setInterval(() => {
const totalChilds = document.querySelectorAll('.gws-localreviews__general-reviews-block > *').length;
const totalReviews = document.querySelector('.z5jxId').innerText.slice(0, -8);
if (totalChilds === totalReviews) {
clearInterval(timer);
resolve();
}
scroller.scrollBy(0, 400);
}, 100);
}));