aimake.log
AI 실전

클로드 코드가 웹 화면을 못 볼 때 — 브라우저를 붙이는 세 가지 방법

애드센스 거절 원인을 찾을 때 저는 검색 페이지가 크롤러에게 본문 2자짜리 빈 페이지라는 걸 뒤늦게 알았습니다. 자바스크립트가 그리는 페이지라 HTML 만 봐서는 멀쩡해 보였습니다. 모바일에서 커버가 잘려 있던 것도 몇 주 동안…

2026.08.14 9 MIN
세 줄 요약

클로드 코드는 curl 로 HTML 을 읽을 수는 있지만 렌더된 화면은 못 봅니다. 자바스크립트로 그리는 페이지, 모바일 레이아웃, 로그인 뒤 화면이 전부 사각지대입니다.

크롬 앱이 없어도 됩니다. npx -y playwright screenshot 한 줄이면 캡처가 나옵니다. 브라우저는 처음 한 번 받고(554MB), 캡처 한 장에 2.7~3.6초 걸립니다.

로그인이 필요한 화면은 Playwright 로 못 엽니다. 쿠키가 없어서 마케팅 랜딩만 보입니다. 이때는 aside 로 내가 이미 로그인해 둔 브라우저를 그대로 씁니다.

애드센스 거절 원인을 찾을 때 저는 검색 페이지가 크롤러에게 본문 2자짜리 빈 페이지라는 걸 뒤늦게 알았습니다. 자바스크립트가 그리는 페이지라 HTML 만 봐서는 멀쩡해 보였습니다. 모바일에서 커버가 잘려 있던 것도 몇 주 동안 몰랐습니다. 노트북 화면만 봤기 때문입니다.

둘 다 원인이 같습니다. 에이전트가 화면을 못 봤습니다. 그래서 클로드 코드에 브라우저를 붙였습니다. 방법은 세 가지고, 고르는 기준은 두 개뿐입니다.

curl 로는 왜 부족할까

curl 은 서버가 처음 내려주는 HTML 만 가져옵니다. 요즘 웹의 상당 부분은 그 뒤에 자바스크립트가 그립니다.

확인하려는 것 curl 브라우저
메타 태그 · JSON-LD
JS 가 그리는 본문
모바일 레이아웃
요소가 화면 밖으로 넘쳤는지
로그인 뒤 화면 조건부

제 사이트의 /find/ 가 정확히 첫 번째 함정이었습니다. HTML 에는 검색창 마크업이 있으니 문제없어 보이는데, 실제로 렌더된 본문은 2자였습니다.

방법 ① Playwright CLI — 설치 없이 한 줄

가장 간단합니다. 크롬 앱을 깔 필요도 없고, 프로젝트에 패키지를 추가할 필요도 없습니다.

npx -y playwright screenshot \
  --viewport-size=390,844 --full-page \
  https://example.com/ mobile.png

npx-y 는 필수입니다. 없으면 설치 확인 프롬프트에서 멈춰버립니다.

처음 실행하면 브라우저를 내려받습니다. 실제로 재봤습니다.

항목 실측값
Playwright 1.62.0
Chromium Chrome for Testing 151.0.7922.34
chromium 356MB
chromium-headless-shell 196MB
총 설치 용량 554MB
캡처 1장 소요 2.7~3.6초

캡처 말고도 쓸 게 있습니다.

npx -y playwright pdf <url> out.pdf        # PDF 로 저장
npx -y playwright open <url>               # 창 띄워서 직접 보기
npx -y playwright codegen <url>            # 클릭하면 코드로 받아쓰기
npx -y playwright mcp                      # MCP 서버로 붙이기

넘침을 숫자로 잡는 요령

--full-page 로 찍은 PNG 의 가로 픽셀이 지정한 뷰포트보다 크면 그만큼 화면 밖으로 넘친 것입니다. 가로 스크롤바가 생기는 문제를 눈이 아니라 숫자로 잡을 수 있습니다.

$ npx -y playwright screenshot --viewport-size=1000,560 --full-page demo.html out.png
$ sips -g pixelWidth out.png
  pixelWidth: 1078        # 78px 넘침

한계: 로그인은 안 된다

Playwright CLI 는 매번 빈 브라우저를 띄웁니다. 쿠키도 세션도 없습니다. 그래서 로그인이 필요한 주소를 열면 로그인 화면이나 마케팅 페이지가 나옵니다.

방법 ② aside repl — 로그인이 필요한 화면은 어떻게 볼까

여기서 aside 를 씁니다. 사용자가 이미 로그인해 둔 브라우저를 그대로 쓰는 AI 브라우저입니다. aside repl 은 Playwright 와 거의 같은 API 를 제공합니다.

aside repl "const p = await openTab('https://example.com/');
            console.log(await p.title());"

같은 주소를 두 방식으로 열어 비교했습니다. 구글 서치콘솔입니다.

같은 구글 서치콘솔 주소를 두 방식으로 연 비교 화면. 왼쪽 Playwright 는 쿠키가 없어 'Improve your performance on Google Search' 마케팅 랜딩 페이지에 도달했다. 오른쪽 aside repl 은 터미널 출력에 page 화살표 개요, title 개요, 6588밀리초로 찍혀 실제 대시보드에 도달했음을 보여준다.
같은 주소인데 왼쪽은 마케팅 랜딩, 오른쪽은 실제 대시보드다
Playwright aside repl
도달한 화면 마케팅 랜딩 실제 대시보드
페이지 제목 Google Search Console 개요
소요 1.9~2.3초 6.6초

같은 URL 인데 결과가 완전히 다릅니다. Playwright 에는 쿠키가 없고, aside 에는 있기 때문입니다.

aside repl 은 REPL 이라 변수가 세션 안에서 유지됩니다. 화면 읽기용 API 도 따로 있습니다.

const p = await openTab(url);
await snapshot(p);            // 접근성 트리로 화면 구조 읽기
await annotatedScreenshot(p); // 클릭 가능한 요소에 번호 붙인 캡처
await p.pdf({ path: './artifacts/page.pdf' });

방법 ③ aside exec — 작업을 통째로 맡기기

repl 이 “내가 한 단계씩 조종”이라면 exec 는 “목적만 주고 맡기기”입니다. 브라우저 전용 서브에이전트를 띄우는 것에 가깝습니다.

aside exec "서치콘솔에서 지난 7일 검색 유입 상위 10개 쿼리를 표로 정리해줘"

여러 사이트를 오가야 하거나 단계가 유동적일 때 적합합니다. 반대로 정확한 증거가 필요한 일(캡처, 특정 값 확인, 파일 다운로드)은 repl 이 낫습니다. 에이전트가 알아서 하면 무엇을 봤는지 재현하기 어렵습니다.

어느 걸 언제 쓰나

브라우저 자동화 방식 고르기화면을 봐야 할 때 — 어느 걸 쓰나렌더된 화면이필요하다Playwright CLI로그인 불필요 · 결정적 캡처2.7~3.6초 · 설치 554MBnpx playwright screenshotaside repl로그인 상태 그대로 · 같은 API6.6초 · 쿠키 유지aside repl "await openTab(u)"aside exec작업을 통째로 위임자율 에이전트 세션aside exec "…해줘"
기준은 두 개다 — 로그인이 필요한가, 결정적인 증거가 필요한가

정리하면 기준은 두 개입니다. 로그인이 필요한가, 그리고 결정적인 증거가 필요한가.

상황 도구
공개 페이지 캡처 · 모바일 확인 · 넘침 검사 Playwright CLI
로그인 뒤 화면을 정확히 봐야 함 aside repl
여러 단계를 알아서 처리해야 함 aside exec
데스크톱 앱 창(브라우저 아님) computer-use

로그인 브라우저를 에이전트에 붙인다는 것

마지막은 편의가 아니라 위험 이야기입니다. aside 에 작업을 맡기는 순간, 에이전트는 내가 로그인해 둔 모든 것에 접근할 수 있는 브라우저를 쥡니다. 메일, 은행, 회사 계정이 같은 브라우저에 있다면 그것도 포함입니다.

제가 정한 선은 이렇습니다.

  1. 결과물에 무엇이 들어갔는지 항상 눈으로 확인한다. 특히 글에 실을 캡처는 계정 정보가 찍히지 않았는지 본다
  2. 자율 실행(exec)은 읽기 작업에만 쓴다. 글 쓰기 · 결제 · 설정 변경은 직접 한다
  3. 공개할 화면은 되도록 로그인 없이 보이는 것으로 대체한다

이 글의 비교 이미지에서도 실제 대시보드 화면 대신 터미널 출력만 실었습니다. 제목이 「개요」로 떴다는 사실만으로 로그인 여부는 충분히 증명됩니다.

정리

  1. 클로드 코드는 HTML 은 읽어도 렌더된 화면은 못 본다 — JS 페이지 · 모바일 · 로그인 뒤가 사각지대
  2. 크롬 없이 npx -y playwright screenshot 한 줄이면 캡처가 된다. -y 없으면 프롬프트에서 멈춘다
  3. 브라우저 설치는 554MB, 캡처 한 장은 2.7~3.6초
  4. --full-page 캡처 가로 폭이 뷰포트보다 크면 그만큼 넘친 것 — 레이아웃 버그를 숫자로 잡는다
  5. 로그인이 필요하면 Playwright 로는 안 된다 — aside repl 이 쿠키를 그대로 쓴다
  6. 단계가 유동적이면 aside exec, 정확한 증거가 필요하면 aside repl
  7. 로그인 브라우저를 맡기는 건 권한을 통째로 넘기는 일 — 자율 실행은 읽기에만

브라우저를 붙이고 나서 제일 크게 바뀐 건 도구가 아니라 습관입니다. 이제 글을 올리면 390px 로 한 장 찍어보고 끝냅니다. 3초짜리 습관 하나가, 몇 주 동안 못 본 문제를 그날 잡아줍니다.

검증 기록: 2026-08-13 실측. Playwright 1.62.0 / Chromium(Chrome for Testing) 151.0.7922.34, 설치 용량은 ~/Library/Caches/ms-playwright 실측(chromium 356MB + headless-shell 196MB + ffmpeg 2.5MB = 554MB). 캡처 소요는 aimakelog.app 홈 3회 측정(3.61 / 2.69 / 2.82초), 서치콘솔 2회 측정(2.31 / 1.87초). 로그인 비교는 구글 서치콘솔 같은 주소를 Playwright CLI 와 aside repl(1.26.810.1915)로 각각 열어 대조 — 전자는 마케팅 랜딩, 후자는 제목 「개요」로 실제 대시보드 도달(6588ms). 넘침 검사 수치는 뷰포트 1000px 재현 페이지에서 전체 캡처 폭 1078px 확인.

Author

재박

AI로 뭔가를 만들다 막힌 지점과, 그걸 어떻게 뚫었는지 기록합니다.

RSS
구독
이어서 읽기
aimake.log AI로 실제 결과물 만드는 실전 기록 소개 개인정보처리방침 RSS