νμ»΄λ
μ€(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 λ₯Ό μ§μ ν΄λ¦/νμ΄ννμ¬ μ μ±μ°κΈ° / ν μ€νΈ μ½μ / ν μμ± λ± μλν
μ 체 νμ΄μ§μμ μνλ μμμ 골λΌ(μΌμͺ½) κ³ ν΄μλλ‘ μλΌλ λλ€(μ€λ₯Έμͺ½).
capture --grid λ‘ μ’ν μ‘κΈ° |
zoom --clip κ²°κ³Ό |
|---|---|
![]() |
![]() |
30μͺ½μ§λ¦¬ λ¬Έμμ 29μͺ½μμ
[B] λ¬Έλ¨ λͺ¨μμΉμ (B1~B8)λ§zoom --clip "35,300,715,510" --scale 3μΌλ‘ μΆμΆ.
# 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.
capture --gridλ‘ κ²©μ μ ν νμ΄μ§λ₯Ό λ°κ³ β- μνλ μμμ
x, y, width, heightλ₯Ό λμΌλ‘ μ½μ΄ β 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

