master
John Lauer Add the ComponentSearchEngine per-site login+download recipe: signin flow, the ms-vs-apex host/username gotcha, model-a… 51f91d9 3mo ago

ComponentSearchEngine / SamacSys (componentsearchengine.com)

Free CAD aggregator: symbol + footprint + 3D STEP for millions of parts, in ~24 EDA formats (Altium, KiCad, Eagle, OrCAD/Allegro, Cadence, PADS, …). Download is login-gated (free account). Proven end to end 2026-08-13: pup logged in with a recovered credential and downloaded a real multi-format library (LIB_NE555P.zip, 1.7 MB — Altium .SchLib+.PcbLib, OrCAD, Cadence, PDF).

  • Login entry URL: https://componentsearchengine.com/signin
  • Flow type: single-page email+password form.
  • 2FA: none.
  • Anti-automation: Cloudflare on some paths — cleared automatically now that pup presents as Google Chrome (pup ≥ 2.0.141; see ee-parts-sites.md).

Credential notes (learned the hard way)

  • The saved login often lives under ms.componentsearchengine.com (the SamacSys account host), but the sign-in page is the apex componentsearchengine.com. pup's vault matches across the registrable domain (≥ 2.0.144), so a cred saved on either host works on the other.
  • Verify the USERNAME. A stale/wrong username is a silent failure ("Fail to authenticate"). If a login fails, recover the CURRENT username+password straight from the user's browser password manager — see recover-a-current-password.md.

Steps

  1. pup_open_window {url:"https://componentsearchengine.com/signin"} on the durable adom-you profile.
  2. pup_login {submit:true, submitReason:"…"} — vault autofills + submits (background). Confirm sign-in: the header shows the user's name / "Your Profile" (not "Sign In / Register").
  3. Go to the part: https://componentsearchengine.com/part-view/<MPN>/<Manufacturer> (spaces → %20). Check the model is available: the page must NOT say "ECAD model is currently unavailable" and the "Download Model" button must be enabled. Not every part has a pre-built model — some only offer "Build this Model" / "Request this Model (48 h)". Pick a part with a ready model (most common jellybeans have one; e.g. NE555P does, this exact TI-LM358 did not).

The download (the non-obvious part)

The blue "Download Model" control is an <a class="ecad-model-button"> whose onclick is analytics only (recordUserClickDefer(...)) — the real action is its href, a Supplyframe tracker: //analytics.supplyframe.com/trackingservlet/track/?r=<token>. That tracker 302-redirects to https://componentsearchengine.com/partApi/model/download?from=…, which streams the ZIP.

A bare pup_click / pup_download {selector} on the button can stall (the click's navigation + redirect chain doesn't always surface a download event, and the click sometimes bounces to /register). Reliable recipe: read the href and navigate to it directly — Chrome follows the redirect and downloads the ZIP to the Downloads folder:

href = pup_eval {"expr":"(document.querySelector('a.ecad-model-button')||{}).href"}
pup_navigate {url: href}        # follows tracker → /partApi/model/download → ZIP lands in Downloads

Then confirm the file: LIB_<MPN>.zip in the user's Downloads (magic PK). The archive contains per-format subfolders (Altium/*.SchLib+*.PcbLib, OrCAD_Allegro16/, Capture/, DEHDL/, How_To_Use_Models.pdf, license.txt). To pull it into the container, use desktop_pull_file.

Gotchas

  • Profile completeness: a partially-registered CSE account can bounce the download to /register (Company / Job Role required). If the download redirects to registration, the account needs its profile completed once (a human step); after that, downloads flow.
  • Token freshness: the tracker ?r= token is per-render — re-read the href on the current part page each time; don't cache it.
  • The default output format is set in the account's model preferences; the ZIP bundles multiple formats regardless, so KiCad/Altium/OrCAD are all present.