# naver_playwright.py 보완: 계정 양생 + 돌발 상황 모니터링

## 작업 개요
task-1531.1에서 naver_playwright.py v2가 완성되었으나(connectOverCDP + 클립보드 붙여넣기 + 105건 테스트 PASS),
아래 2가지 기능이 누락되어 추가 구현한다.

## 산출물
`/home/jay/projects/BlogAuto/publisher/naver_playwright.py` (기존 파일 수정)
`/home/jay/projects/BlogAuto/tests/test_naver_playwright.py` (테스트 추가)

## 추가 기능 1: 계정 양생 (Warm-up 루틴)

### 배경
글쓰기 URL로만 직행하면 통계적으로 봇 판정됨.
publish 실행 전 "정상적인 사용자 행동"을 시뮬레이션해야 함.

### 구현: `_warmup_routine(page)` 함수
publish() 내에서 _navigate_to_write() 호출 전에 실행.

1. 네이버 메인 접속 (naver.com) → 2~4초 대기
2. 뉴스 기사 1개 클릭 → 30초 스크롤 (3~6회 휠, 각 3~8초 대기)
3. 내 블로그(incar_top) 방문 → 20초 체류 (2~4회 스크롤)
4. 네이버 검색 — 보험 관련 키워드 랜덤 선택하여 검색
   - 키워드 풀: ['보험설계사 이직', 'GA 보험대리점', '보험 트렌드', '보험 영업 노하우', '보험 상담', '인카금융']
   - 검색어 입력은 human_type 사용 (글자별 80~200ms)
   - 검색 결과 스크롤 (2~4회, 각 2~4초)
5. 2~4초 대기 후 글쓰기 페이지로 이동

### publish 플로우 변경
```python
def publish(self, ...):
    ...
    self._verify_session(page)
    self._warmup_routine(page)  # ★ 추가
    self._navigate_to_write(page)
    ...
```

## 추가 기능 2: 돌발 상황 모니터링

### 배경
네이버가 띄우는 "새로운 기기 로그인 알림", "비밀번호 변경 캠페인", "캡차" 등
예상치 못한 팝업 발생 시 스크린샷을 캡처하여 텔레그램으로 즉시 전송.

### 구현: `_send_error_screenshot(page, error_msg)` 함수
```python
def _send_error_screenshot(self, page, error_msg):
    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
    screenshot_path = f"/tmp/naver-error-{timestamp}.png"
    page.screenshot(path=screenshot_path)
    
    # 텔레그램으로 스크린샷 전송
    subprocess.run([
        "/usr/local/bin/cokacdir", "--sendfile", screenshot_path,
        "--chat", "6937032012", "--key", "c119085addb0f8b7"
    ], check=False)
```

### publish 플로우에 try-except 래핑
```python
def publish(self, ...):
    ...
    try:
        self._verify_session(page)
        self._warmup_routine(page)
        self._navigate_to_write(page)
        self._handle_draft_modal(page)
        # ... 본문 입력 ...
        self._publish_or_schedule(page, schedule_time)
    except Exception as e:
        self._send_error_screenshot(page, str(e))
        raise
    finally:
        page.close()
        browser.close()
```

## 테스트
- _warmup_routine: mock page로 goto/click/wheel 호출 순서 검증
- _send_error_screenshot: mock subprocess.run + mock page.screenshot 검증
- 기존 105건 테스트 회귀 없음
- time.sleep mock 필수! (기존 버그 재발 방지)

## 완료 기준
1. _warmup_routine 함수 추가 + publish에서 호출
2. _send_error_screenshot 함수 추가 + try-except 래핑
3. 테스트 전체 PASS (10초 이내)
4. pyright 에러 0건
