等待所有匹配选择器的元素被隐藏
Wait for all elements matching selector to be hidden
我有一个包含多个面板的页面。在加载每个面板时,它有一个 div 和一个 class=progress
。加载该面板后,相同的 div 将获得 display:none;
的属性。我试过 await page.waitForFunction() and waitForSelector()
,但当第一个 div 变得不可见时,它们似乎评估为真。我想等他们都看不见了再截图。
如果您认为此解决方案有用且正确,请select将其作为正确答案。
您是说面板是 iframe 吗?
let allDivsHidden = false
do {
let statesArray = []
await page.waitForTimeout(100) // Or any number of time you like
for (let i = 0; i < page.frames().length; i++) {
statesArray.push( await page.frames()[i].evaluate(() => {
return document.querySelector('.progress').style.display === 'none'
}))
}
allDivsHidden = statesArray.filter(boolean => boolean === false).length === 0
} while (!allDivsHidden)
也许这个
let panels = await page.$$('.panels')
let hiddenPanels = await page.$$('.panels' , {visible : false })
while(panels.length != hiddenPanels.length )
{
await page.waitForTimeout(3000);
hiddenPanels = await page.$$('.panels' , {visible : false }) ;
}
或者只检查可见的
let visiblePanels = await page.$$('.panels' , {visible : true })
while(visiblePanels.length > 0 )
{
await page.waitForTimeout(3000);
visiblePanels = await page.$$('.panels' , {visible : true }) ;
}
好的,感谢 Max 和 Edi 的回答,我成功了。我也在使用旧版本的节点,因此创建了一个“延迟”功能。
let visiblePanels = await page.$$('div.progress-animation:not([style*="display: none;"])');
//logger.info(visiblePanels.length);
while(visiblePanels.length > 0 )
{
//logger.info("Waiting in loop...");
await delay(500);
visiblePanels = await page.$$("div.progress-animation:not([style*='display: none;'])");
}
谢谢!
我有一个包含多个面板的页面。在加载每个面板时,它有一个 div 和一个 class=progress
。加载该面板后,相同的 div 将获得 display:none;
的属性。我试过 await page.waitForFunction() and waitForSelector()
,但当第一个 div 变得不可见时,它们似乎评估为真。我想等他们都看不见了再截图。
如果您认为此解决方案有用且正确,请select将其作为正确答案。
您是说面板是 iframe 吗?
let allDivsHidden = false
do {
let statesArray = []
await page.waitForTimeout(100) // Or any number of time you like
for (let i = 0; i < page.frames().length; i++) {
statesArray.push( await page.frames()[i].evaluate(() => {
return document.querySelector('.progress').style.display === 'none'
}))
}
allDivsHidden = statesArray.filter(boolean => boolean === false).length === 0
} while (!allDivsHidden)
也许这个
let panels = await page.$$('.panels')
let hiddenPanels = await page.$$('.panels' , {visible : false })
while(panels.length != hiddenPanels.length )
{
await page.waitForTimeout(3000);
hiddenPanels = await page.$$('.panels' , {visible : false }) ;
}
或者只检查可见的
let visiblePanels = await page.$$('.panels' , {visible : true })
while(visiblePanels.length > 0 )
{
await page.waitForTimeout(3000);
visiblePanels = await page.$$('.panels' , {visible : true }) ;
}
好的,感谢 Max 和 Edi 的回答,我成功了。我也在使用旧版本的节点,因此创建了一个“延迟”功能。
let visiblePanels = await page.$$('div.progress-animation:not([style*="display: none;"])');
//logger.info(visiblePanels.length);
while(visiblePanels.length > 0 )
{
//logger.info("Waiting in loop...");
await delay(500);
visiblePanels = await page.$$("div.progress-animation:not([style*='display: none;'])");
}
谢谢!