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": "