Javascript 木偶演员重新加载页面,直到某些特定样式发生更改

Javascript 木偶演员重新加载页面,直到某些特定样式发生更改,javascript,puppeteer,Javascript,Puppeteer,我想打开web浏览器并继续重新加载,直到重新加载的页面具有不同的样式,然后移动到下一个要执行的函数,除非继续重新加载 假设我有一个p标记,然后重新加载页面,因为display:block: 如果你能读懂我的话,你需要重新加载页面 但是停止重新加载页面,因为p标记的显示属性是display:none现在(在这种情况下,不要重新加载,而是继续执行其他代码): 如果你能读懂我的话,你需要重新加载页面 我尝试使用递归函数,但不起作用: (异步()=>{ 试一试{ //初始化浏览器选项卡并等待完全加载

我想打开web浏览器并继续重新加载,直到重新加载的页面具有不同的样式,然后移动到下一个要执行的函数,除非继续重新加载

假设我有一个
p
标记,然后重新加载页面,因为
display:block

如果你能读懂我的话,你需要重新加载页面

但是停止重新加载页面,因为
p
标记的显示属性是
display:none现在(在这种情况下,不要重新加载,而是继续执行其他代码):

如果你能读懂我的话,你需要重新加载页面

我尝试使用递归函数,但不起作用:

(异步()=>{
试一试{
//初始化浏览器选项卡并等待完全加载,然后转至下一步
const browser=wait puppeter.launch({headless:false,args:['--no sandbox']});
const page=wait browser.newPage();
等待page.setViewport({宽度:1366,高度:768})
wait page.goto(url,{waitUntil:'networkidle2'});
//等待解析递归函数
等待检查标签(第页)
//我们在这里是因为p.显示:无
//继续执行其他代码:)
}捕捉(错误){
console.log(错误)
}
})();
const checkPTag=(第页)=>{
返回新承诺(异步(解析、拒绝)=>{
//在dom中搜索p标记并检查其显示属性
让结果=等待isPTagAvailable(第页)
如果(结果==‘未启动’){
//重新加载页面cz p.显示:块
等待页面。重新加载({waitUntil:[“networkidle0”,“domcontentloaded”]})
//再次递归调用
等待检查标签(第页)
}else if(结果=='started'){
//无需重新加载页面cz p.none
解析('已启动')
}
})
}
常量isPTagAvailable=(第页)=>{
返回新承诺(异步(解析、拒绝)=>{
wait page.waitForSelector(“#body”);
const pTags=等待页面。$$eval(
"身体",,
节点=>
nodes.map(元素=>{
const p=element.querySelector('p#notYetStarted');
console.log(p)
返回JSON.parse(JSON.stringify(getComputedStyle(element,null.display));
} )    
);
常数pDisplay=pTags[0]
如果(pDisplay==='block'){
解析('未启动')
}否则{
解析('已启动')
} 
})
}
上面的代码打开一个web浏览器,等待dom完全加载,并获取
p
标记的
display
值,由于它是
block
,因此重新加载页面到目前为止还不错,但如果display value更改为
none
,但仍然尝试重新加载页面。
sry对于长代码

我认为您的代码只是加载了与第一个请求相同的缓存。因此,您应该在URL的末尾添加一些随机数,以确保响应与第一个响应的缓存不同

const puppeteer = require ('puppeteer')

const urlPage = 'http://localhost/testing/test_display_none.html'

;(async () => {

    const browser = await puppeteer.launch ({
        headless: false,
        devtools: false
    })

    const [page] = await browser.pages ()

    page.setDefaultNavigationTimeout(0)

    const functionToExecute = async () => {
        // Code to run if P tag display is none (hidden)
        console.log ('P tag display = none\n Executing next defined function...')
    }

    const ifTagPdisplayed = async () => {

        const openPage = await page.goto ( urlPage + '?r=' + Date.now() , { waitUntil: 'networkidle2', timeout: 0 } )

        const elemExist = await page.waitForSelector ('#notYetStarted', { timeout: 0 })

        const getDisplay = await page.evaluate ( () => document.querySelector('#notYetStarted').style.display === 'none' )

        if ( !getDisplay ) {
            await ifTagPdisplayed ()
        } else {
            await functionToExecute ()
        }

    }

    await ifTagPdisplayed ()

})()