import asyncio, json, os, re, math, time import cdp exec(open('build.py', encoding='utf-8').read().split('def relevant')[0]) # CORE, SPECIAL, norm, cap_tokens ... PLAN = json.load(open('cost_plan.json', encoding='utf-8')) Qd = {x['sid']: x for x in json.load(open('queries.json', encoding='utf-8'))} OUT = 'cost_detail.json' out = json.load(open(OUT, encoding='utf-8')) if os.path.exists(OUT) else {} SKUJS = r'''(()=>{const r=(window.__ICE_APP_CONTEXT__||{}).loaderData?.home?.data?.res; if(!r) return null; const props=(r.skuBase?.props||[]).map(p=>({name:p.name,values:(p.values||[]).map(v=>v.name)})); return JSON.stringify({title:r.item?.title,props})})()''' CLICK = r'''((txt)=>{const el=[...document.querySelectorAll("span,div")].filter(e=>e.children.length<=2&&e.innerText&&e.innerText.trim()===txt);if(!el.length)return false;el[el.length-1].click();return true})''' def tokens(p): sid, q = p['sid'], Qd[p['sid']]['q'] if '贴片电阻' in q: v = q.split()[1].upper(); m = re.match(r'([\d.]+)([KMR])', v); num, u = m.group(1), m.group(2) f = {v, num + u, num + u + 'Ω'} if '.' in num: a, b = num.split('.'); f.add(f'{a}{u}{b}') return [f], [q.split()[0]] if '贴片电容' in q: return [cap_tokens(p['desc'])], [re.search(r'(\d+(\.\d)?V)', p['desc']).group(1).upper()] c = CORE.get(sid, '') return [{c}] if c else [], [] def score_sku(name, p): must, nice = tokens(p) U = name.upper() s = 0 for grp in must: if any(re.search(r'(?= 5 and norm(t) in norm(name)) for t in grp if t): s += 5 for t in nice: if re.search(r'(?