美文网首页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)); 
                    

相关文章

  • 2019-05-14 异步

    同步:等待结果异步:不等待结果// 同步的 sleepfunction sleep(seconds){var st...

  • JS-异步和同步

    简单来说同步和异步可以这么形容。同步:等待结果异步:不等待结果需要注意的是异步常常伴随回调一起出现,但是异步不是回...

  • I/O模型与多路复用

    同步、异步、阻塞、非阻塞 同步 & 异步 同步与异步是针对多个事件(线程/进程)来说的。 如果事件A需要等待事件B...

  • 并发编程基础

    几个基本概念 同步&异步同步(Synchronous)同步方法一旦调用必须等待方法调用返回后才会继续后续行动异步(...

  • 关于高并发的几个重要概念

    1.1 同步和异步 首先这里说的同步和异步是指函数/方法调用方面。 很明显,同步调用会等待方法的返回,异步调用会瞬...

  • 一、多线程基础

    多线程基础 基本概念 同步、异步 同步 线程B要等待线程A的执行结果之后才能执行。要顺序执行 异步 相对同步来说,...

  • 2022-11-17 08多线程

    GCD 同步串行 死锁!,会导致队列引起循环等待 没有问题 同步并发 答案:12345 产生死锁 异步串行 异步并...

  • iOS多线程记录

    一.概述 1.基本概念 同步与异步的概念 同步 必须等待当前语句执行完毕,才可以执行下一个语句。 异步 不用等待当...

  • 2018-05-24-多线程学习

    java多线程并发的编程学习 1,概念的学习 同步异步:同步需要等待异步不需要,同步如对共享数据操作避免脏数据...

  • 同步&异步,阻塞&非阻塞

    1.同步/异步,阻塞/非阻塞的区别 同步/异步是侧重与程序间的消息通信机制。 同步意味着程序发起调用一直同步等待直...

网友评论

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

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