← back to Newmor Onboard

scripts/browse-check.cjs

18 lines

const fs=require('node:fs');const {chromium}=require('/Users/macstudio3/.npm-global/lib/node_modules/playwright');
const root='/Users/macstudio3/Projects/newmor-onboard';
(async()=>{const browser=await chromium.launch();try{const page=await browser.newPage({viewport:{width:1440,height:1100}});const results=[];let requests=[];const pending=[];
page.on('response',r=>{if(/mybcapps\.com\/bc-sf-filter\/(search|filter)/.test(r.url()))pending.push((async()=>{const j=await r.json().catch(()=>null);requests.push({url:r.url(),status:r.status(),keys:j?Object.keys(j):[],total_product:j?.total_product,products:j?.products?.map(p=>({id:p.id,vendor:p.vendor,handle:p.handle,tags:p.tags,price:p.price}))});})());});
for(const [name,path] of [['collection','/collections/vendors?q=Newmor%20Wallcoverings'],['search','/search?q=KOT-23&type=product']]){
 if(process.argv.includes('--controls')&&name!=='collection')continue;
 requests=[];const r=await page.goto('https://designerwallcoverings.com'+path,{waitUntil:'domcontentloaded',timeout:60000});await page.waitForTimeout(10000);await Promise.all(pending);
 if(process.argv.includes('--controls'))console.log('CONTROLS',await page.locator('#nw-sort').evaluate(n=>n.parentElement.outerHTML));
 const decline=page.getByRole('button',{name:'Decline',exact:true});if(await decline.isVisible().catch(()=>false))await decline.click({timeout:5000}).catch(()=>{});
 await page.screenshot({path:root+`/verification/browse-${name}.png`,fullPage:true});
 fs.writeFileSync(root+`/verification/browse-${name}.html`,await page.content());
 const data=await page.locator('.boost-sd__product-item, .product-list-item').evaluateAll(nodes=>nodes.map(n=>({text:n.innerText,html:n.outerHTML.slice(0,1800),visible:!!(n.offsetWidth||n.offsetHeight||n.getClientRects().length)})));
 results.push({name,http:r.status(),url:page.url(),body:(await page.locator('body').innerText()).slice(-5000),cards:data,requests});
 console.log(name,JSON.stringify({status:r.status(),cards:data.map(d=>({text:d.text,visible:d.visible})),controls:await page.locator('select,input[type=range]').count()}));
}
fs.writeFileSync(root+'/verification/browse-check.json',JSON.stringify({timestamp:new Date().toISOString(),results},null,2)+'\n');
}finally{await browser.close()}})().catch(e=>{console.error(e.message);process.exit(1)});