'use strict'; const WS_URL = 'ws://127.0.0.1:18792/cdp'; const TOKEN = '0537d84a67f2e43b525964bb43d93f6dfae1ec1b50946455'; const TARGET_URL = 'https://diaonline.supermercadosdia.com.ar/medios-de-pago-y-promociones'; const WS = require('/usr/lib/node_modules/openclaw/node_modules/ws').WebSocket || require('/usr/lib/node_modules/openclaw/node_modules/ws'); const ws = new WS(WS_URL, { headers: { 'x-openclaw-relay-token': TOKEN } }); let _id=1, sessionId=null, started=false; const cbs=new Map(); const pendingReqs=new Map(); // requestId → {url, postData} let clickPhase=false; const clickPhaseRequests=[]; function send(method,params,cb){ const id=_id++; const m={id,method,params:params||{}}; if(sessionId)m.sessionId=sessionId; if(cb)cbs.set(id,cb); ws.send(JSON.stringify(m)); } ws.on('open',()=>{ send('Target.getTargets',{},(res)=>{ const t=(res.targetInfos||[]).filter(t=>t.type==='page')[0]; console.log('Attaching to:',t&&t.url.slice(0,60)); send('Target.attachToTarget',{targetId:t.targetId,flatten:true},(r2)=>{ sessionId=r2.sessionId; send('Network.enable',{maxPostDataSize:65536}); send('Page.enable'); send('Page.navigate',{url:TARGET_URL}); }); }); }); ws.on('message',raw=>{ const msg=JSON.parse(raw); if(msg.id&&cbs.has(msg.id)){const cb=cbs.get(msg.id);cbs.delete(msg.id);cb(msg.result||{});return;} if(!msg.method)return; if(msg.method==='Network.requestWillBeSent'){ const {requestId,request}=msg.params; pendingReqs.set(requestId,{url:request.url,method:request.method,postData:request.postData}); if(clickPhase&&request.method==='POST'&&request.url.includes('graphql')){ console.log('[CLICK-POST]',request.url.slice(0,80)); console.log(' body:',String(request.postData||'').slice(0,300)); clickPhaseRequests.push(requestId); } } if(msg.method==='Network.responseReceived'){ const {requestId,response}=msg.params; const req=pendingReqs.get(requestId); if(!req)return; if(clickPhase&&req.method==='POST'&&req.url.includes('graphql')){ // Fetch response body with slight delay setTimeout(()=>{ send('Network.getResponseBody',{requestId},(res)=>{ if(!res||!res.body)return; const text=res.base64Encoded?Buffer.from(res.body,'base64').toString():res.body; console.log('\n[CLICK-POST RESPONSE] url:',req.url.slice(0,80)); console.log(' status:',response.status); console.log(' body:',text.slice(0,800)); }); },200); } } if(msg.method==='Page.frameNavigated'){ const url=msg.params&&msg.params.frame&&msg.params.frame.url; if(url&&url.includes('medios-de-pago')&&!started){ started=true; console.log('Navigated to promo page, waiting 8s...'); setTimeout(doClick,8000); } } }); function doClick(){ console.log('\n=== Clicking first Ver Legales button ==='); clickPhase=true; send('Runtime.evaluate',{ expression:`(function(){ var btns=document.querySelectorAll('.diaio-custom-bank-promotions-0-x-bank-modal__button'); if(btns.length===0){ // fallback btns=document.querySelectorAll('button'); btns=[].filter.call(btns,function(b){return /ver legales/i.test(b.textContent);}); } if(!btns[0])return 'no button'; btns[0].scrollIntoView({block:'center'}); btns[0].click(); return 'clicked: '+btns[0].textContent.trim(); })()` },(res)=>{ console.log('Click result:',res&&res.result&&res.result.value); // Wait 3s for network + render setTimeout(checkModal,3000); }); } function checkModal(){ // Get all modal-class divs that are visible send('Runtime.evaluate',{ expression:`(function(){ var cls='diaio-custom-bank-promotions-0-x-bank-modal'; var modals=document.querySelectorAll('[class*="'+cls+'"]'); var results=[]; for(var i=0;i30){ results.push({cls:el.className.toString().slice(0,80),text:t.slice(0,500)}); } } } // Also look for any element with 'legal' in class that's visible var legalEls=document.querySelectorAll('[class*="legal"],[class*="Legal"],[class*="modal"],[class*="Modal"]'); for(var j=0;j50&&t2.length<5000){ results.push({cls:el2.className.toString().slice(0,80),text:t2.slice(0,500)}); } } } return JSON.stringify(results.slice(0,5)); })()` },(res)=>{ const val=res&&res.result&&res.result.value; let items=[]; try{items=JSON.parse(val||'[]');}catch(e){} console.log('\n=== Modal elements found:',items.length,'==='); items.forEach((it,i)=>console.log('['+i+'] '+it.cls+':\n '+it.text)); console.log('\nClosing in 2s...'); setTimeout(()=>ws.close(),2000); }); } ws.on('error',e=>console.error('WS error:',e.message)); ws.on('close',()=>process.exit(0)); setTimeout(()=>{console.log('Timeout');ws.close();},60000);