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