美文网首页aardio
记录aardio同步等待异步处理结果

记录aardio同步等待异步处理结果

作者: LCSan | 来源:发表于2023-08-08 23:23 被阅读0次

    起因,要实现同步从chrome获取cookies,然后去做一些事情。来回折腾了selenium,chrome本地cookie文件,cdp方式来获取cookie。(PS:selenium拿不到readonly cookie,本地cookie文件拿不到会话cookie,cpd通过network.getCookies获取不到readonly,通过拦截Network.requestWillBeSent然后获取一些信息)。
    巧合的是chrome升级到115版本,对应的webdriver还没更新。本地方式cookie用不了,最终只能选择cdp方式获取。而cdp是websocket通讯,走的异步消息循环。由于没有理解透消息循环、窗口线程、线程之间的原理,浪费了大量时间在这个点上。
    这里用win.pumpMessage() 等待消息处理,用一个全局标识作为标记,标记变更后::PostThreadMessage()主动发起一个消息,用来触发全局标记的判断,从而结束pumpMessage,通过这种方式实现伪同步。

                        var cr = chrome.remote(params);             
                        console.log(cr.remoteDebuggingPort);                    
                        
                        // 创建cdp
                        var ws = web.socket.chrome();
                        var isOk;
                        // 这里ws操作全异步。
                        ws.on("Network.requestWillBeSent",function(param){
                            ...
                                        
                                            isOk = true;
                                            console.log(111);
                                            ::PostThreadMessage(thread.getId(),1234,0,0);
                                        
                                ...             
                        })
                        // 链接第一个能用的页面
                        ws.connectFirstDebuggingPage(cr.remoteDebuggingPort);
                        // 等待链接完成
                        ws.waitForConnected();                      
                        // 激活cdp网络相关操作
                        ws.Network.enable(maxTotalBufferSize = 10240;); 
                                // 打开网页
                                ws.Page.navigate(url = domain;);
                                do{
                                    win.pumpMessage();
                                }while(!isOk)
                        
                        console.log("2222");
                        console.log(inet.getCookie(domain)); 
                        
    

    相关文章

      网友评论

        本文标题:记录aardio同步等待异步处理结果

        本文链接:https://www.haomeiwen.com/subject/dxlopdtx.html