# Skill-Publish Squarespace 로그인 실패 문제 ## 작성일 2025-09-18 ## 작성자 claude ## 문제 상황 skill-publish 서비스가 Squarespace에 자동 로그인을 시도할 때 지속적으로 실패하는 문제 발생. ### 증상 1. 로그인 버튼 클릭 후 페이지 전환 없음 2. OAuth 리다이렉션 페이지에서 멈춤 3. 로그: "CAPTCHA 감지됨!" 4. 실제로는 "The username or password is incorrect" 에러 표시 ### 로그 분석 ``` 13:33:04 - 이메일 입력: sig*** 13:33:04 - 패스워드 입력 13:33:05 - 로그인 버튼 클릭 13:33:05 - OAuth 리다이렉션 페이지 상태 확인을 위해 15초 대기... 13:33:20 - 현재 URL: https://login.squarespace.com/api/1/login/oauth/provider/authorize?... 13:33:20 - CAPTCHA 감지됨! 13:33:55 - Account Dashboard 대기 시간 초과 ``` ## 원인 분석 ### 근본 원인: reCAPTCHA v3 차단 Squarespace 로그인 페이지 하단에 "Secure Login with reCAPTCHA subject to Google Terms & Privacy" 문구 확인. ### 상세 분석 1. **reCAPTCHA가 Headless 브라우저를 봇으로 감지** - Playwright의 Headless 모드는 일반 브라우저와 다른 특징들을 가짐 - navigator.webdriver 속성 등으로 자동화 도구 감지 2. **보안 메시지 위장** - reCAPTCHA는 봇 감지 시 "CAPTCHA 실패"라고 직접 알리지 않음 - 대신 "아이디/패스워드 오류" 메시지로 위장 - 봇에게 탐지 사실을 숨기기 위한 보안 전략 3. **코드의 잘못된 CAPTCHA 감지** - 코드: `if await page.locator('text=/captcha/i').count() > 0` - 페이지 하단의 "reCAPTCHA" 안내 문구를 CAPTCHA로 오인 - 실제 CAPTCHA 챌린지는 없음 ## 시도한 해결책 ### 1. playwright-stealth 라이브러리 (실패) - pyproject.toml에 추가하고 stealth_async 적용 - 문제: 최신 버전이 stealth_async 함수를 제공하지 않음 - 라이브러리가 2023년 3월 이후 업데이트 중단 (unmaintained) ### 2. 환경변수 확인 - .env 파일의 따옴표 처리 확인 - Docker Compose가 자동으로 따옴표 제거 - 결과: 환경변수는 정상적으로 읽힘 ## 해결 방안 ### 1. 단기 해결책 - Headless 모드 비활성화 ```python # docker-compose.yml environment: - HEADLESS_BROWSER=false ``` - 실제 브라우저 UI를 표시하여 reCAPTCHA 우회 - 단점: 서버 환경에서는 사용 불가 ### 2. 중기 해결책 - 수동 Stealth 스크립트 적용 ```python # publisher_service.py에 추가 stealth_script = """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined, }); Object.defineProperty(navigator, 'languages', { get: () => ['ko-KR', 'ko'], }); Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5], }); """ # 브라우저 페이지 생성 후 await page.add_init_script(stealth_script) ``` ### 3. 장기 해결책 - API 기반 접근 - Squarespace API 사용 가능성 조사 - 또는 수동 로그인 후 세션 쿠키 재사용 ## 교훈 1. **자동화 탐지 기술의 발전** - 최신 웹사이트들은 정교한 봇 탐지 시스템 사용 - Headless 브라우저만으로는 한계 존재 2. **에러 메시지 신뢰 불가** - "패스워드 오류"가 실제 패스워드 문제가 아닐 수 있음 - 보안 시스템의 의도적인 오도 가능성 고려 3. **외부 라이브러리 의존성 주의** - playwright-stealth처럼 유지보수 중단된 라이브러리 주의 - 핵심 기능은 공식 API 사용 권장 ## 참고 자료 - [Playwright 공식 문서 - add_init_script](https://playwright.dev/python/docs/api/class-page#page-add-init-script) - [reCAPTCHA v3 작동 방식](https://developers.google.com/recaptcha/docs/v3) - [Puppeteer Extra Plugin Stealth](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth)