← back to Pattern Vault
fernwick: fix Spoonflower uploader — upload page moved to /artists/designs/new
4fc904746d518380770b9ab924e81ab66d23a631 · 2026-07-07 16:38:33 -0700 · Steve Abrams
The uploader targeted stale URLs (/en/upload, /upload, /design_upload) which are now
just landing pages with an 'UPLOAD A DESIGN' link and NO file input — so every upload
failed with 'file input not found' and the pipeline published 0 designs despite running
daily. Spoonflower moved the real uploader to /artists/designs/new (confirmed: 1 hidden
input[type=file], accept image/jpeg,png). Fixed the URL list + wait for the input ATTACHED
(it's hidden dropzone-style; setInputFiles drives hidden inputs). Dry-run now finds the
input for all 3 test designs (was 3/3 failed → 0 failed). Session valid, generator works.
Files touched
M whimsical-compare/daily/scripts/upload_sf.js
Diff
commit 4fc904746d518380770b9ab924e81ab66d23a631
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue Jul 7 16:38:33 2026 -0700
fernwick: fix Spoonflower uploader — upload page moved to /artists/designs/new
The uploader targeted stale URLs (/en/upload, /upload, /design_upload) which are now
just landing pages with an 'UPLOAD A DESIGN' link and NO file input — so every upload
failed with 'file input not found' and the pipeline published 0 designs despite running
daily. Spoonflower moved the real uploader to /artists/designs/new (confirmed: 1 hidden
input[type=file], accept image/jpeg,png). Fixed the URL list + wait for the input ATTACHED
(it's hidden dropzone-style; setInputFiles drives hidden inputs). Dry-run now finds the
input for all 3 test designs (was 3/3 failed → 0 failed). Session valid, generator works.
---
whimsical-compare/daily/scripts/upload_sf.js | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/whimsical-compare/daily/scripts/upload_sf.js b/whimsical-compare/daily/scripts/upload_sf.js
index 31508ee..bef0528 100755
--- a/whimsical-compare/daily/scripts/upload_sf.js
+++ b/whimsical-compare/daily/scripts/upload_sf.js
@@ -77,13 +77,19 @@ async function messyType(el, text) {
// reach the uploader the proven way: homepage -> account menu -> "UPLOAD A DESIGN"
async function openUploader() {
- // try known direct URLs first, then fall back to the menu link
- for (const u of ['https://www.spoonflower.com/en/upload', 'https://www.spoonflower.com/upload',
- 'https://www.spoonflower.com/design_upload']) {
+ // try known direct URLs first, then fall back to the menu link.
+ // 2026-07-07: the real uploader moved to /artists/designs/new — the old /en/upload,
+ // /upload, /design_upload are now just landing pages (an "UPLOAD A DESIGN" link, no
+ // file input), which is why every upload failed with "file input not found".
+ for (const u of ['https://www.spoonflower.com/artists/designs/new',
+ 'https://www.spoonflower.com/en/upload', 'https://www.spoonflower.com/upload']) {
await pg.goto(u, { waitUntil: 'domcontentloaded', timeout: 40000 }).catch(() => {});
await sleep(rnd(1500, 3000));
if (pg.url().includes('/login')) return 'login';
- if (await pg.$('input[type=file]')) return 'ok';
+ // the file input is HIDDEN (dropzone pattern) — wait for it ATTACHED, not visible;
+ // setInputFiles() drives hidden inputs fine.
+ const fi = await pg.waitForSelector('input[type=file]', { state: 'attached', timeout: 8000 }).catch(() => null);
+ if (fi) return 'ok';
}
// menu fallback
await pg.goto('https://www.spoonflower.com/', { waitUntil: 'domcontentloaded', timeout: 40000 }).catch(() => {});
← 3007363 chore: v0.2.1 (session close)
·
back to Pattern Vault
·
chore: v0.2.2 (session close) — Spoonflower uploader fix (up 5903c70 →