fix(scraper): switch fs-com to de.fs.com for EUR prices as primary source

EUR prices scraped verbatim from de.fs.com — no conversion needed.
USD derivation (EUR→USD) happens downstream, not EUR←USD.
Fixes price discrepancy: TIP showed USD 999×0.92=EUR 866 vs real €948 on de.fs.com.
This commit is contained in:
Rene Fichtmueller 2026-04-06 01:24:47 +02:00
parent e0db86252b
commit 75a5b7318a

View File

@ -11,7 +11,9 @@ import { ensureVendor, upsertPriceObservation, findOrCreateScrapedTransceiver, p
import { contentHash, parsePrice, parseStockLevel, parseQuantity } from "../utils/hash"; import { contentHash, parsePrice, parseStockLevel, parseQuantity } from "../utils/hash";
import { updateVerifiedSpecs, parseSpecTable } from "../utils/spec-updater"; import { updateVerifiedSpecs, parseSpecTable } from "../utils/spec-updater";
const BASE_URL = "https://www.fs.com"; // Use German store (de.fs.com) — scrapes EUR prices directly from the website.
// EUR is the primary price; USD is derived (EUR → USD), never the reverse.
const BASE_URL = "https://de.fs.com";
const CATEGORY_URLS = [ const CATEGORY_URLS = [
"/c/1g-sfp-81", "/c/1g-sfp-81",
@ -104,19 +106,20 @@ export async function scrapeFs(): Promise<void> {
headless: true, headless: true,
launchContext: { launchContext: {
launchOptions: { launchOptions: {
args: ["--disable-blink-features=AutomationControlled", "--lang=en-US"], args: ["--disable-blink-features=AutomationControlled", "--lang=de-DE"],
}, },
}, },
preNavigationHooks: [ preNavigationHooks: [
async ({ page }) => { async ({ page }) => {
await page.setExtraHTTPHeaders({ await page.setExtraHTTPHeaders({
"Accept-Language": "en-US,en;q=0.9", "Accept-Language": "de-DE,de;q=0.9",
}); });
// EUR as primary currency — prices scraped verbatim from de.fs.com
await page.context().addCookies([ await page.context().addCookies([
{ name: "currency", value: "USD", domain: ".fs.com", path: "/" }, { name: "currency", value: "EUR", domain: ".fs.com", path: "/" },
{ name: "lang", value: "en", domain: ".fs.com", path: "/" }, { name: "lang", value: "de", domain: ".fs.com", path: "/" },
{ name: "country", value: "US", domain: ".fs.com", path: "/" }, { name: "country", value: "DE", domain: ".fs.com", path: "/" },
]); ]);
}, },
], ],