Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 木偶演员:如何倾听变化_Javascript_Node.js_Puppeteer - Fatal编程技术网

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、文本?