Skip to content

Latest commit

Β 

History

History
90 lines (60 loc) Β· 3.75 KB

File metadata and controls

90 lines (60 loc) Β· 3.75 KB

claw-hancomdocs

ν•œμ»΄λ…μŠ€(Hancom Docs) μ›Ή λ·°μ–΄/에디터(webhwp)λ₯Ό Playwright 둜 λ“œλΌμ΄λΈŒ β€” .hwp / .hwpx μ—…λ‘œλ“œ β†’ λ Œλ” νŽ˜μ΄μ§€ 캑처 / μ˜μ—­ ν™•λŒ€ / ν…μŠ€νŠΈ 검색 / (Phase 2) 직접 νŽΈμ§‘ κΉŒμ§€.

  • Playwright headless β€” λ³΄μ΄λŠ” μ°½ μ—†μŒ, 물리 마우슀/ν‚€λ³΄λ“œ μ•ˆ κ±΄λ“œλ¦Ό, λ°±κ·ΈλΌμš΄λ“œ κ°€λŠ₯
  • 둜그인 1회 β€” λΉ„λ°€λ²ˆν˜Έ μ €μž₯ 없이 μ„Έμ…˜(auth.json)만 μž¬μ‚¬μš©
  • A4 νŽ˜μ΄μ§€λ§Œ κΉ”λ”νžˆ β€” νˆ΄λ°”Β·μ—¬λ°± 없이, νŽ˜μ΄μ§€ 잘림 없이, λ°©ν–₯(μ„Έλ‘œ/κ°€λ‘œ) μžλ™ 인식
  • μ—΄ 수 μ—†λŠ” 파일 감지 β€” 손상/ν˜•μ‹μ˜€λ₯˜λŠ” cannot_open μƒνƒœλ‘œ 보고
  • Local-machine only β€” μ‚¬μš©μž Mac / Windows / Linux λ¨Έμ‹ μ—μ„œ 직접 μ‹€ν–‰ (Cowork sandbox proxy 차단)

μƒνƒœ

  • Phase 1 (capture) β€” μž‘λ™ 검증됨. μ•„λž˜ μ‚¬μš©λ²• κ·ΈλŒ€λ‘œ
  • Phase 2 (edit) β€” κ΅¬ν˜„ 쀑. ν•œμ»΄λ…μŠ€ web UI λ₯Ό 직접 클릭/νƒ€μ΄ν•‘ν•˜μ—¬ μ…€ μ±„μš°κΈ° / ν…μŠ€νŠΈ μ‚½μž… / ν‘œ 생성 λ“± μžλ™ν™”

데λͺ¨ β€” μ˜μ—­ ν™•λŒ€(zoom)

전체 νŽ˜μ΄μ§€μ—μ„œ μ›ν•˜λŠ” μ˜μ—­μ„ 골라(μ™Όμͺ½) κ³ ν•΄μƒλ„λ‘œ μž˜λΌλƒ…λ‹ˆλ‹€(였λ₯Έμͺ½).

capture --grid 둜 μ’Œν‘œ 작기 zoom --clip κ²°κ³Ό
선택 ν™•λŒ€

30μͺ½μ§œλ¦¬ λ¬Έμ„œμ˜ 29μͺ½μ—μ„œ [B] 문단 λͺ¨μ–‘ μ„Ήμ…˜(B1~B8)만 zoom --clip "35,300,715,510" --scale 3 으둜 μΆ”μΆœ.

μ„€μΉ˜ (ν™˜κ²½λ§ˆλ‹€ 1회)

# 1) μŠ€ν‚¬μ„ Claude Code μŠ€ν‚¬ ν΄λ”λ‘œ
git clone <this-repo> ~/.claude/skills/hancomdocs-capture

# 2) μ˜μ‘΄μ„±
cd ~/.claude/skills/hancomdocs-capture/scripts
npm install
npx playwright install chromium     # Chromium λ‹€μš΄λ‘œλ“œ (~수백 MB)

# 3) 둜그인 (λΈŒλΌμš°μ € μ°½μ—μ„œ ν•œμ»΄λ…μŠ€ 둜그인 β†’ auth.json μžλ™ μ €μž₯)
node login.js

μŠ€ν‚¬λ‘œ μ“Έ λ•ŒλŠ” μœ„ 과정을 SKILL.mdκ°€ μžλ™ μ κ²€Β·μ•ˆλ‚΄ν•©λ‹ˆλ‹€ β€” μ‚¬μš©μžλŠ” "이 hwp ν•œμ»΄λ…μŠ€μ— μ˜¬λ €μ„œ λ³΄μ—¬μ€˜"라고만 ν•˜λ©΄ λ©λ‹ˆλ‹€.

μ‚¬μš©

cd scripts

# 첫 νŽ˜μ΄μ§€(λ˜λŠ” Nμͺ½) A4 ν•œ μž₯ κΉ”λ”νžˆ 캑처
node hancom.js capture --file /abs/report.hwp --page 1

# μ’Œν‘œ 격자λ₯Ό μ–Ήμ–΄μ„œ (ν™•λŒ€ν•  μ˜μ—­ μ’Œν‘œ 읽기용)
node hancom.js capture --file /abs/report.hwp --page 9 --grid

# νŽ˜μ΄μ§€ μ•ˆμ˜ νŠΉμ • μ˜μ—­ ν™•λŒ€ (νŽ˜μ΄μ§€ μ™Όμͺ½μœ„=0,0 κΈ°μ€€ CSS px)
node hancom.js zoom --name report.hwp --page 9 --clip "60,420,670,260" --scale 3

# ν…μŠ€νŠΈλ₯Ό μ°Ύμ•„ κ·Έ νŽ˜μ΄μ§€ 캑처
node hancom.js around --name report.hwp --text "μ§€μ›λŒ€μƒ"

κ²°κ³ΌλŠ” λ§ˆμ§€λ§‰ 쀄 RESULT_JSON={...}. μžμ„Έν•œ λͺ…λ Ή λͺ…μ„ΈλŠ” ORDER_SPEC.txt.

μ’Œν‘œ 흐름 (μΊ”λ²„μŠ€ λ Œλ”λΌ ν…μŠ€νŠΈ μœ„μΉ˜ μžλ™νƒμƒ‰ λΆˆκ°€)

  1. capture --grid 둜 격자 μž…νžŒ νŽ˜μ΄μ§€λ₯Ό λ°›κ³  β†’
  2. μ›ν•˜λŠ” μ˜μ—­μ˜ x, y, width, heightλ₯Ό 눈으둜 읽어 β†’
  3. zoom --clip "x,y,w,h" 둜 ν™•λŒ€.

μ—΄ 수 μ—†λŠ” 파일

{ "status": "cannot_open", "docName": "broken.hwp",
  "reason": "webhwpκ°€ νŒŒμΌμ„ μ—΄ 수 μ—†μŠ΅λ‹ˆλ‹€(손상/ν˜•μ‹ 였λ₯˜). hwpΒ·hwpx 동일 μ—λŸ¬." }

(ν•œκ³„: μ ˆλ‹¨/뢀뢄손상 μΌλΆ€λŠ” μ—λŸ¬ 없이 κΉ¨μ§„ λ°”μ΄νŠΈκ°€ λ Œλ”λ˜λŠ” 'μ‘°μš©ν•œ κ°€λΉ„μ§€' λͺ¨λ“œκ°€ μžˆμ–΄ 미감지.)

λ³΄μ•ˆ

  • λΉ„λ°€λ²ˆν˜ΈλŠ” μ €μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 둜그인 μ„Έμ…˜ ν† ν°λ§Œ auth.json에 μ €μž₯λ©λ‹ˆλ‹€.
  • auth.json은 ν˜„μž¬ 둜그인 μ„Έμ…˜ κ·Έ 자체라 민감 β†’ .gitignore둜 컀밋 차단됨. 유좜 주의, 만료 μ‹œ node login.js μž¬μ‹€ν–‰.

λ¬Έμ„œ

  • SKILL.md β€” Claude Code μŠ€ν‚¬ μ •μ˜ (트리거 Β· μ˜¨λ³΄λ”© Β· λͺ…λ Ή)
  • ORDER_SPEC.txt β€” μ—μ΄μ „νŠΈ μ£Όλ¬Έ(λͺ…λ Ή) λͺ…μ„Έ
  • DEBUG_NOTES.md β€” 개발 λ…ΈνŠΈ (접근법, webhwp λ‚΄λΆ€ 발견, μ•ˆμ „ κ΅ν›ˆ, μ‹€νŒ¨ λͺ¨λ“œ)

λΌμ΄μ„ μŠ€

MIT