← 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);});