Javascript 木偶演员:如何倾听变化
我有一个聊天应用程序,其状态由以下行表示:Javascript 木偶演员:如何倾听变化,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我有一个聊天应用程序,其状态由以下行表示: 离线 我希望木偶演员每次在这个范围内的文字发生变化时都记录下来 比如说,一开始状态是“离线”,然后变为“在线”,过了一段时间后变为“离开”,等等。我想让木偶演员捕捉那些瞬间和状态(离线>在线>远离) 我设法做到了以下几点: const page=wait browser.newPage(); 等待页面。转到('https://chat.com'); const statusHandle=等待页面。$('span#status'); 让statusTe
离线
我希望木偶演员每次在这个范围内的文字发生变化时都记录下来
比如说,一开始状态是“离线”,然后变为“在线”,过了一段时间后变为“离开”,等等。我想让木偶演员捕捉那些瞬间和状态(离线>在线>远离)
我设法做到了以下几点:
const page=wait browser.newPage();
等待页面。转到('https://chat.com');
const statusHandle=等待页面。$('span#status');
让statusText=wait page.evaluate(()=>document.querySelector(“#status”).innerText);
让iniVal={statusHandle,statusText};
此时,我有了statusHandle
和初始状态
现在,我的理解是(根据和),我需要将两者结合在一起
wait page.waitForFunction(
(iniVal)=>iniVal.statusHandle.innerHTML!==iniVal.statusText,
{超时:0},
邪恶的
)
然后把它放在一个环中。这就是我要奋斗的地方
首先,它给出了一个类型错误“TypeError:Converting circular structure to JSON”,这是因为传递的键值对不是原语,但即使我过于简化了,只是这样做了(根据):
wait page.waitForFunction(
'document.querySelector(“span#status”).内部Text==“联机”'
)
它一无所获
总而言之,我期待着
document.querySelector('#status')中评估更改。innerText!==状态文本
我刚刚设置了一个带有回调的递归函数: 异步函数监视器(选择器、回调、prevValue){ const newVal=等待页面。$(选择器); 如果(newVal!==prevValue){ 回调(newVal); } /*增加一些延迟*/ 等待新的承诺(=>setTimeout(1000)) /*递归调用*/ 监视器(选择器、回调、newVal); }
monitor('span#status',status=>{
//每当“状态”更改时激发
})
PS:我自己还没有试过,但这可能也会有帮助:谢谢你&很抱歉耽搁了。我(稍加修改后)选择了一个递归函数,它的工作方式很有魅力。对于人们阅读——考虑在N尝试之后实现AutoRestART,因为(根据我的阅读)存在内存泄漏的可能性,也避免在获取页面时发生超时错误(发生在我身上一次),执行以下=>等待页.GTO('',{WaIT::DOM CurristLoad)};我们如何查看已更改的HTML、文本?