from playwright.sync_api import sync_playwright
import os, time, traceback

URL = "https://creator.xiaohongshu.com/publish/publish"
IMAGE_PATH = os.path.abspath("test.jpg")

def click_tab_js(page, tab_text: str) -> bool:
    script = """
(t) => {
  const titles = Array.from(document.querySelectorAll("span.title"));
  const hit = titles.find(x => (x.textContent || "").trim() === t);
  if (!hit) return {ok:false, reason:"no-span-title"};
  const tab = hit.closest(".creator-tab") || hit.parentElement;
  if (!tab) return {ok:false, reason:"no-closest-tab"};
  tab.click();
  return {ok:true, reason:"clicked"};
}
"""
    res = page.evaluate(script, tab_text)
    print("JS_CLICK_RES =", res)
    return bool(res.get("ok"))

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context(storage_state="xhs_state.json")
    page = context.new_page()

    try:
        page.goto(URL, wait_until="domcontentloaded")
        page.wait_for_timeout(4000)

        # 先切到“上传图文”
        click_tab_js(page, "上传图文")
        page.wait_for_timeout(1500)

        # 找到图文上传的 input（accept 里含 jpg/png）
        uploaded = False
        for frame in page.frames:
            try:
                loc = frame.locator("input.upload-input[type='file']")
                if loc.count() == 0:
                    continue

                for i in range(min(loc.count(), 10)):
                    el = loc.nth(i)
                    acc = (el.get_attribute("accept") or "").lower()
                    if any(x in acc for x in [".jpg", ".jpeg", ".png", ".webp"]):
                        el.set_input_files(IMAGE_PATH)
                        uploaded = True
                        print("UPLOAD_SENT = True")
                        break

                if uploaded:
                    break
            except:
                pass

        print("UPLOADED_FLAG =", uploaded)
        print("看页面：应出现 test.jpg 缩略图/上传进度")

    except Exception as e:
        print("ERROR:", e)
        traceback.print_exc()

    input("按回车关闭浏览器...")
    browser.close()
