← back to Dw Marketing Reels

fetch-dg.cjs

46 lines

'use strict';
// Last attempt at Designers Guild Surimono Berry PDG1062-01 via Browserbase.
// DG site was throwing "Major Error" — retry with human-like nav + longer waits, and
// try the DG media CDN + Google image knowledge graph fallback.
const os=require('os'),fs=require('fs'),path=require('path');
require('dotenv').config({ path: os.homedir()+'/.claude/skills/browserbase/.env' });
const Browserbase=require('@browserbasehq/sdk').default; const {chromium}=require('playwright-core');
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
const OUT='/Users/macstudio3/Projects/dw-marketing-reels/sourced-images/imageless-14';
async function fetchBytes(page,url){return await page.evaluate(async u=>{try{const r=await fetch(u);if(!r.ok)return{err:r.status};const b=await r.arrayBuffer();const by=new Uint8Array(b);let s='';for(let i=0;i<by.length;i++)s+=String.fromCharCode(by[i]);return{b64:btoa(s),type:r.headers.get('content-type')||'',len:by.length};}catch(e){return{err:e.message};}},url);}

(async()=>{
  const bb=new Browserbase({apiKey:process.env.BROWSERBASE_API_KEY});
  const session=await bb.sessions.create({projectId:process.env.BROWSERBASE_PROJECT_ID,browserSettings:{solveCaptchas:true}});
  console.error('session',session.id);
  const browser=await chromium.connectOverCDP(session.connectUrl);
  const page=browser.contexts()[0].pages()[0]||await browser.contexts()[0].newPage();
  page.setDefaultTimeout(60000);
  const out={tries:[]};
  const urls=[
    'https://www.designersguild.com/uk/surimono-berry-wallpaper/pdg1062-01',
    'https://www.designersguild.com/uk/wallpaper/plain-textured-wallpaper/surimono-berry-wallpaper/pdg1062-01',
    'https://www.designersguild.com/uk/search?searchTerm=PDG1062',
    'https://www.designersguild.com/uk/',
  ];
  for(const u of urls){
    try{
      await page.goto(u,{waitUntil:'domcontentloaded'}).catch(()=>{});
      await sleep(6000);
      const t=await page.title(); const cur=page.url();
      const imgs=await page.evaluate(()=>{const o=[];document.querySelectorAll('img,source').forEach(im=>{const s=im.currentSrc||im.src||im.getAttribute('data-src')||'';if(/pdg1062|surimono|dg-cdn|azureedge|media|images/i.test(s)&&/\.(jpg|jpeg|png|webp)/i.test(s)&&!/logo|icon|sprite/i.test(s))o.push(s);});return [...new Set(o)];});
      out.tries.push({u,title:t,cur,imgs:imgs.slice(0,10)});
      console.error(`try ${u} -> [${t}] imgs=${imgs.length}`);
      if(imgs.some(x=>/pdg1062|surimono/i.test(x))) break;
    }catch(e){out.tries.push({u,err:e.message});}
  }
  // pick + download
  const all=out.tries.flatMap(t=>t.imgs||[]);
  const pick=all.find(x=>/pdg1062-01/i.test(x))||all.find(x=>/surimono/i.test(x))||all[0];
  out.pick=pick;
  if(pick){const r=await fetchBytes(page,pick);out.dl=r&&r.len;if(r&&r.len>3000){const ext=/webp/i.test(r.type)?'webp':/png/i.test(r.type)?'png':'jpg';const fn=`PDG1062-01__surimono-berry.${ext}`;fs.writeFileSync(path.join(OUT,fn),Buffer.from(r.b64,'base64'));out.saved=fn;}}
  await browser.close().catch(()=>{});
  fs.writeFileSync('/Users/macstudio3/Projects/dw-marketing-reels/fetch-dg.json',JSON.stringify(out,null,2));
  console.log(JSON.stringify(out,null,2));
})().catch(e=>{console.error('FATAL',e.message);process.exit(1);});