← back to Nationalrealestate

cap_search3.cjs

32 lines

const { chromium } = require('playwright');
(async () => {
  const url = process.argv[2] || 'https://corkwallcovering.com/';
  const q = process.argv[3] || 'grasscloth';
  const out = process.argv[4] || '/tmp/search-grid.png';
  const b = await chromium.launch();
  const page = await b.newPage({ viewport: { width: 1280, height: 1000 } });
  const errs = [];
  page.on('console', m => { if (m.type()==='error') errs.push(m.text()); });
  page.on('pageerror', e => errs.push('PAGEERR '+e.message));
  await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 });
  const titles = async () => page.$$eval('#grid a.card, #grid .card, [data-card]', els => els.slice(0,5).map(e => (e.textContent||'').replace(/\s+/g,' ').trim().slice(0,40)));
  const before = await titles().catch(()=>[]);
  // find the search box (in-page or corner-nav)
  const hasIn = await page.$('#searchInput');
  await page.fill('#searchInput', q);
  await page.waitForTimeout(1500);
  const after = await titles().catch(()=>[]);
  const stat = await page.$eval('#statLine', el=>el.textContent).catch(()=> '');
  console.log('URL', url, 'Q', q);
  console.log('BEFORE cards:', JSON.stringify(before));
  console.log('AFTER  cards:', JSON.stringify(after));
  console.log('statLine:', stat.trim());
  console.log('changed:', JSON.stringify(before)!==JSON.stringify(after));
  console.log('console errors:', errs.slice(0,5));
  await page.evaluate(()=>{ const g=document.querySelector('#grid'); if(g) g.scrollIntoView(); });
  await page.waitForTimeout(400);
  await page.screenshot({ path: out });
  console.log('shot', out);
  await b.close();
})().catch(e => { console.error('ERR', e.message); process.exit(1); });