← back to Eur Recrawl

probe-pricelists.mjs

25 lines

// probe-pricelists.mjs — inspect the Osborne trade PRICE LISTS page for bulk downloads.
import { chromium } from 'playwright';
import path from 'node:path';
const ctx = await chromium.launchPersistentContext(path.join(process.cwd(), '.auth', 'osbtrade'), {
  headless: false, channel: 'chrome', viewport: { width: 1440, height: 900 },
});
const page = ctx.pages()[0] || await ctx.newPage();
await page.goto('https://tradenew.osborneandlittle.com/user/pricelists', { waitUntil: 'domcontentloaded', timeout: 60000 }).catch((e) => console.log('nav', e.message));
await page.waitForTimeout(3500);
console.log('title:', (await page.title().catch(() => '')).slice(0, 50), '@', page.url());
const out = await page.evaluate(() => {
  const t = document.body ? document.body.innerText : '';
  const links = [...document.querySelectorAll('a[href]')].map((a) => ({ txt: (a.innerText || '').trim().slice(0, 40), href: a.getAttribute('href') }))
    .filter((l) => l.href && /\.(pdf|xls|xlsx|csv|zip)|download|pricelist|price-list/i.test(l.href + ' ' + l.txt));
  const selects = [...document.querySelectorAll('select')].map((s) => ({ id: s.id, name: s.name, opts: [...s.options].map((o) => o.text).slice(0, 12) }));
  return { bodyStart: t.replace(/\s+/g, ' ').slice(0, 300), links: links.slice(0, 40), selects };
});
console.log('body:', out.bodyStart);
console.log('download/pricelist links:');
for (const l of out.links) console.log(`  ${l.txt} -> ${l.href}`);
console.log('selects:', JSON.stringify(out.selects));
await page.screenshot({ path: 'probe-pricelists.png', fullPage: true }).catch(() => {});
await page.waitForTimeout(1500);
await ctx.close();