지난 글에서 PC를 켜면 작업환경이 알아서 세팅되도록 만들어봤는데, 이번에는 한 발 더 나아가 "반복 업무 자체"를 자동화할 때 쓰는 방법입니다. Playwright로 웹 자동화를 하면 실행할 때마다 새 브라우저가 떠서 로그인·세션이 매번 초기화됩니다. 로그인이 필요한 사이트를 반복 자동화할 때 이게 은근 번거롭죠. 디버그 모드 Chrome을 한 번 띄워두고 Playwright가 거기에 CDP로 붙는(attach) 방식으로, 로그인 한 번만 하고 세션을 계속 재사용할 수 있습니다.
이전 글: 사무실 출근 후 업무 시작 1분컷 자동화 (로그온 자동 실행 + 멀티모니터 창 배치)
1. 문제: 매 실행마다 새 브라우저 + 재로그인chromium.launch()로 띄우면 깨끗한 새 프로필이라, 매번 다시 로그인해야 합니다. 2차 인증까지 있으면 자동화가 자동화가 아니게 됩니다.
2. 해결: 디버그 Chrome을 한 번 띄워두기
Chrome을 원격 디버깅 포트와 전용 프로필로 한 번만 띄웁니다. 메인 브라우징과 섞이지 않게 전용 프로필을 쓰고, 스크립트가 꺼져도 살아있도록 분리 실행합니다.

3. Playwright에서 그 Chrome에 붙기connect_over_cdp로 이미 떠 있는 Chrome에 attach합니다. 핵심은 새 컨텍스트를 만들지 말고, 그 Chrome의 기존 컨텍스트(browser.contexts[0])를 그대로 쓰는 것입니다. 그래야 로그인된 세션 위에서 시작합니다.

4. 떠 있으면 붙고, 없으면 띄우기
실전에서는 포트가 살아있는지 확인해서, 떠 있으면 붙고 없으면 띄운 뒤 붙도록 묶어 둡니다. 그러면 실행 한 번으로 항상 같은 세션에 연결됩니다.

- 전용 프로필(--user-data-dir)로 평소 쓰는 Chrome과 분리 (오염·잠금 방지)
- 분리 실행(DETACHED)으로 스크립트가 끝나도 Chrome 생존 → 다음 실행에 재attach
- 로그인은 그 디버그 Chrome에서 한 번만, 이후 세션 재사용
5. 주의할 점
같은 프로필을 두 프로세스가 동시에 열면 잠김 오류가 납니다. 디버그 Chrome은 하나만 띄우고, 자동화는 거기 붙기만 하세요. 그리고 이건 어디까지나 내가 권한이 있는 내 계정·사이트에서 쓰는 것이고, 자동 접근을 막는 서비스에는 쓰지 않는 게 맞습니다.
함께 보면 좋은 글:
- 사무실 출근 후 업무 시작 1분컷 자동화 (로그온 자동 실행 + 멀티모니터 창 배치) - 업무 자동화 1탄
- 패스터위스퍼(faster-whisper)로 한국어 음성을 텍스트로 (GPU 메모리 부족까지 잡기) - 반복 작업 줄이기
- 웹 자동화에서 클릭·입력이 안 먹을 때 (input 이벤트 + dispatchEvent 클릭) - 웹 자동화(Playwright)
- 웹 자동화 화면 캡처를 CDP로 즉시 찍기 (멈춤 방지) - CDP 캡처 편
- 웹 자동화(Playwright) 헤드리스가 클라우드플레어(Cloudflare)에 막힐 때 (화면 밖 헤드풀) - 봇 차단 우회 편
- 웹 자동화(Playwright) 스크립트가 끝나도 브라우저 살려두기 (크롬 독립 실행 + CDP 재사용) - 크롬 독립 실행 편
여기까지 Playwright가 매번 새 브라우저를 띄우지 않고 디버그 Chrome 세션을 재사용하는 CDP attach 방식을 정리해봤습니다. 여기까지 읽어주셔서 감사합니다!
'일상' 카테고리의 다른 글
| faster-whisper + pyannote로 화자 분리까지 (누가 말했는지 나누는 STT 파이프라인) (0) | 2026.06.27 |
|---|---|
| 비밀번호 들어가는 sftp/scp를 스크립트로 자동화하기 (expect, sshpass, 흔한 함정) (0) | 2026.06.24 |
| 사무실 출근 후 업무 시작 1분컷 자동화 (로그온 자동 실행 + 멀티모니터 창 배치) (0) | 2026.06.21 |
| 같은 숫자야구를 제미나이(Gemini)와 클로드(Claude)로 짜보니 (AI 코딩 스타일 비교) (0) | 2026.06.21 |
| 안티그래비티(Antigravity) CLI, 어떤 모델 써야 할까? (Gemini·Claude·추론 강도 Low/High) (0) | 2026.06.21 |