From eb0d48814696493ef432063159f3e2e8e4ce1e8f Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 26 Oct 2026 08:49:42 +0900 Subject: [PATCH] =?UTF-8?q?feat(A05=20=EA=B0=80=EC=9D=B4=EB=93=9C):=20?= =?UTF-8?q?=EA=B0=80=EC=9D=B4=EB=93=9C=20=EA=B7=B8=EB=A6=BC=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=20=EC=BA=A1=EC=B2=98=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20+=20=EC=9E=A5=EB=A9=B4=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EA=BC=B4=20=ED=99=95=EC=A0=95(PLAN=20539-1=20=C2=B7=20?= =?UTF-8?q?=EC=9A=94=EA=B5=AC=20359-6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - A05_EduDetail_Guide_Capture.py — 헤드리스 Edge(없으면 chrome) · 1600×900 · 2배 · 밝은 테마 · 장면마다 새 탭 · 노란 둥근 테두리 + 검은 번호 원 · 통째 / clip 요소 · WebP 품질 85 · _manual.json 건너뜀 - 장면 목록 _scenes.json 꼴 = 머리 설명(before · after 단계 click · contextmenu · fill · hover · press · eval · wait · wait_ms · frame = CAD iframe 안 · viewport · settle_ms · clip_pad · callouts pos · allow_post) - 지킴 — 위험 단추(저장 · 확정 · 초기화 · 적용 · 삭제 · 메일) 선택자 · 실제 글자 둘 다 거절 · confirm 은 after [취소] 필요 · 페이지 /api 쓰기 요청 끊음 - 지킴 시험 test_539_guide_capture.py 45 통과 Co-Authored-By: Claude Opus 5.5 --- A05_EduDetail/A05_EduDetail_Guide_Capture.py | 556 +++++++++++++++++++ resources/tester/test_539_guide_capture.py | 182 ++++++ 2 files changed, 738 insertions(+) create mode 100644 A05_EduDetail/A05_EduDetail_Guide_Capture.py create mode 100644 resources/tester/test_539_guide_capture.py diff --git a/A05_EduDetail/A05_EduDetail_Guide_Capture.py b/A05_EduDetail/A05_EduDetail_Guide_Capture.py new file mode 100644 index 000000000..3c475c30f --- /dev/null +++ b/A05_EduDetail/A05_EduDetail_Guide_Capture.py @@ -0,0 +1,556 @@ +"""사용자 가이드 그림 자동 캡처(PLAN 539-1 · 요구 359-6) — 장면 목록대로 헤드리스 Edge 로 찍어 WebP. + +쓰는 법(명령으로 돎 · 서버 안 스레드 아님) + ./venv/Scripts/python.exe A05_EduDetail/A05_EduDetail_Guide_Capture.py --page B05 + [--scene <이름>] [--vite http://localhost:5173] [--api ] [--out <폴더>] + [--project-id ] [--force] [--list] [--headed] + - 기본 out = A05_EduDetail/guide/<페이지>/ · 장면 목록 = out 폴더 `_scenes.json` · 그림 = out/<이름>.webp + - --scene 여러 번 · 이름 일부(앞머리)도 됨 · --list = 브라우저 없이 목록 · 검사 · 건너뜀만 봄 + - --force = `_manual.json` 그림도 찍음 · --headed = 창을 띄워 찍음(헤드리스에서 3D · 지도가 안 그려질 때) + - 프로젝트 = A05_EduDetail/guide/_projects.json `{"road": "", "stab": "", "plan": ""}` + · --project-id 를 주면 그 id 가 모든 프로젝트 장면에 우선(자기 검증 프로젝트로 시험할 때) + - 로그인 = tmp/aislo_cred.json(시스템 관리자) · 값은 어디에도 찍지 않음 + - 끝에 표(장면 · 크기 · kB · 걸린 시간 · 실패 까닭) · 실패가 하나라도 있으면 종료 코드 1 + +`_scenes.json` 꼴 = 장면(그림 하나) 목록 — 이 머리 설명이 기준 + [ + { + "name": "B05_00_overview", 필수 · <페이지>_<두 자리>_<영문 소문자·숫자·_> · 그림 = .webp + "route": "#/b05-profile", 필수 · 해시 주소("#/…") · vite 주소 뒤에 붙임 + "project": "road", road | stab | plan | none(기본) · none = 현재 프로젝트 비움 + "viewport": [1600, 900], 선택 · 화면 크기(CSS px) · 기본 1600×900 · 그림은 늘 2배 + "before": [ 단계, … ], 선택 · 찍기 전 조작(아래 단계 꼴) + "settle_ms": 500, 선택 · before 뒤 · 찍기 전 쉼(기본 500 · 3D · 지도는 2000~) + "clip": null, 선택 · null = 화면 통째 · css = 그 요소만(번호 원까지 넣어 자름) + "clip_pad": 16, 선택 · clip 둘레 여백(CSS px · 기본 16) + "callouts": [ 선택 · 노란 둥근 테두리 + 검은 원 흰 번호 · 번호 = 글 번호 표 + {"n": 1, "sel": "", "pos": "tl"} pos = 번호 원 자리 tl(기본) · tr · bl · br(바깥 모서리) + ], + "after": [ 단계, … ], 선택 · 찍은 뒤 조작(확인창 [취소] · 모달 닫기) + "allow_post": ["/api/b05/…"] 선택 · 허락할 POST 주소 조각(읽기용 POST 만 · 아래 지킴) + } + ] + 단계 = 아래 열쇠 중 하나 + 덧붙임 + {"click": ""} 누름 · {"click": …, "confirm": true} = 확인창만 여는 위험 단추(아래) + {"fill": "", "value": "글"} 칸 채움 + {"hover": ""} 마우스 올림(툴팁) + {"contextmenu": ""} 오른쪽 누름(누름 메뉴 열기) + {"press": "Escape"} 키 · {"press": "Enter", "sel": ""} = 그 요소에서 + {"eval": ""} 페이지에서 JS 실행(펼침 · 스크롤 등) + {"wait": ""} 요소가 보일 때까지 + {"wait_ms": 800} 쉼(ms) + 덧붙임 — "frame": "