← back to Hollywood Import
momentum-probe-grid.mjs
28 lines
// Probe grid: total product count + whether ?page=N paginates or it's scroll-only.
import { chromium } from 'playwright';
const STATE = new URL('momentum-auth.json', import.meta.url).pathname;
const BASE = 'https://momentumco.com';
const b = await chromium.launch({ channel: 'chrome', headless: true });
const ctx = await b.newContext({ storageState: STATE, viewport: { width: 1400, height: 1200 } });
const p = await ctx.newPage();
await p.goto(BASE + '/products?forceSync=1', { waitUntil: 'domcontentloaded', timeout: 60000 }).catch(()=>{});
await p.waitForTimeout(6000);
const info = await p.evaluate(() => {
const body = document.body.innerText;
const count = (body.match(/([\d,]+)\s+(results|products|items|patterns)/i)||[])[0] || null;
const cards0 = document.querySelectorAll('[data-testid="product-card"], a[href*="/products/"]').length;
return { count, cards0, hasLoadMore: /load more|show more/i.test(body) };
});
// scroll a few times, see if cards grow (scroll-load)
let prev = info.cards0;
const growth = [];
for (let i=0;i<4;i++){ await p.mouse.wheel(0, 6000); await p.waitForTimeout(2500);
const c = await p.evaluate(()=>document.querySelectorAll('a[href*="/products/"]').length); growth.push(c); }
// try ?page=2
await p.goto(BASE + '/products?forceSync=1&page=2', { waitUntil: 'domcontentloaded', timeout: 60000 }).catch(()=>{});
await p.waitForTimeout(5000);
const page2 = await p.evaluate(()=>({ first: document.querySelector('a[href*="/products/"]')?.getAttribute('href'),
cards: document.querySelectorAll('a[href*="/products/"]').length }));
console.log(JSON.stringify({ info, scrollGrowth: growth, fromCards0: prev, page2 }, null, 2));
await b.close();