이 스크립트는 구글 포토의 사진을 휴지통으로 보냅니다. 휴지통에 있는 사진은 보관 기간이 지나면 완전히 삭제되며, 그 뒤에는 복구할 수 없습니다.
- 지우면 안 되는 사진이 있다면 먼저 백업하세요. (Google takeout 등)
- 처음에는 반드시 DRY RUN(기본값)으로 실행해서 스크립트가 버튼을 제대로 찾는지 확인하세요. DRY RUN 은 사진을 선택해 보기만 하고 아무것도 지우지 않습니다.
- 실제 삭제로 넘어갈 때도
maxImageCount를 작은 숫자(예:5)로 두고 한 번 시험해 보시기를 권합니다.
이 저장소는 적극적으로 관리하고 있지는 않지만 보관(archive) 처리하지 않았습니다. 이슈와 풀 리퀘스트는 언제든 환영합니다.
구글 포토는 화면 구조를 예고 없이 바꾸기 때문에 어느 시점부터 동작하지 않을 수 있습니다. 그런 경우 대부분은 스크립트 위쪽의 선택자 설정 몇 줄만 고치면 됩니다. 아래 동작하지 않을 때 항목을 참고해 주세요.
최종 동작 확인일: 2026년 7월 28일 한국어 구글 포토에서 사진 약 300장을 실제로 삭제해 정상 동작을 확인했습니다.
감사하게도 @mrishab 님이 만들어 주신 google-photos-delete-tool이 한국어 구글 포토에서는 정상 작동하지 않아 한국어 환경에 맞게 수정한 것입니다. 문서도 한국어로 번역했습니다. (@gomgom)
초기에는 버튼 이름과 CSS 클래스가 영어판과 달라서 포크가 필요했지만, 지금은 언어와 무관한 구조적 선택자를 우선 사용하고 한국어 라벨을 예비 수단으로 두는 방식이라 예전보다 훨씬 덜 깨집니다.
참고: 한국어 구글 포토의 삭제 버튼 이름은
삭제가 아니라휴지통으로 이동입니다. 예전 버전이 동작하지 않았던 이유 중 하나입니다.
아마도 됩니다. 다만 확인한 것은 한국어뿐입니다.
지금 스크립트는 버튼을 찾을 때 문구보다 구조를 먼저 봅니다.
삭제 버튼은 div[data-delete-origin] button, 대화상자의 진행 버튼은
data-mdc-dialog-button-default 표식으로 찾는데, 둘 다 표시 언어와 무관합니다.
실제 실행 로그에서도 두 대화상자 모두 문구를 보기 전에 구조로 찾혔습니다.
문구로 넘어가는 경우를 대비해 한국어와 영어 문구를 함께 넣어 두었지만, 그 외 언어는 넣어 두지 않았습니다.
다른 언어 환경에서 사용해 보시고 결과를 이슈로
알려 주시면 반영하겠습니다. 동작하지 않는다면 콘솔에 찍힌 대화상자 ... 줄을
그대로 붙여넣어 주세요. 버튼 문구가 함께 기록되어 있어 바로 추가할 수 있습니다.
최근 버전의 웹 브라우저가 필요합니다. 구글 크롬에서 확인했으며, 파이어폭스나 MS 엣지 등 다른 브라우저에서도 대체로 동작합니다. 아래 설명은 구글 크롬 기준이라 다른 브라우저에서는 단축키나 메뉴 이름이 다를 수 있습니다.
- 구글 포토로 이동합니다.
참고: 정상 로그인되었다면 내 사진이 표시됩니다.
-
개발자 도구를 실행합니다. 아래 세 가지 중 편한 방법을 쓰세요.
-
개발자 도구가 열리면 'Console' 탭을 누릅니다.
콘솔에 구글이 적어 둔 경고가 보입니다. 콘솔에 코드를 붙여넣는 행위는 공격자가 Self-XSS 로 개인 정보를 빼내는 데 악용될 수 있습니다. 내용을 확인하지 않은 코드는 절대 붙여넣지 마세요. 이 스크립트도 붙여넣기 전에 한 번 읽어 보시길 권합니다.
- delete_photos.js 의 전체 내용을 복사해 콘솔에 붙여넣습니다.
최근 크롬(및 엣지)에서는 콘솔에 코드를 처음 붙여넣으려고 하면 붙여넣기를 막고 아래 경고를 보여줍니다.
Warning: Don't paste code into the DevTools Console that you don't understand
or haven't reviewed yourself. This could allow attackers to steal your identity
or take control of your computer. Please type "allow pasting" below and press
Enter to allow pasting.
잘 모르거나 직접 검토하지 않은 코드를 콘솔에 붙여넣지 마세요. 공격자가 여러분의 신원을 도용하거나 컴퓨터를 장악할 수 있습니다. 붙여넣기를 허용하려면 아래에 "allow pasting" 을 입력하고 Enter 를 누르세요.
이 경고가 나오면 콘솔에 다음을 입력하고 Enter 를 누르세요.
allow pasting
- 직접 타이핑해야 합니다. 이 문구 자체를 복사해서 붙여넣으면 인식되지 않습니다.
- 한 번 입력하면 그 뒤로는 붙여넣기가 됩니다.
- 그다음 5) 로 돌아가 스크립트를 붙여넣으세요.
이 경고는 위에서 설명한 Self-XSS 공격을 막기 위한 장치입니다. 귀찮다고 습관적으로 넘기지 마시고, 붙여넣으려는 코드가 무엇인지 확인한 뒤에 진행하세요.
-
엔터를 누릅니다.
-
처음 실행하면 DRY RUN 으로 동작합니다. 콘솔에 다음과 비슷한 결과가 나오면 정상입니다.
[정보] 모드: DRY RUN (실제로 지우지 않음) [정보] 1번째 주기: 36장 선택함 [정보] 삭제 버튼 찾음 — 구조적 선택자 → "휴지통으로 이동" [완료] DRY RUN 확인 완료 — 실제로는 아무것도 삭제하지 않았습니다. -
확인이 끝났으면 스크립트 위쪽
CONFIG에서dryRun을false로 바꾸고 다시 붙여넣어 실행합니다.const CONFIG = { dryRun: false, // ← 실제 삭제 maxImageCount: 5, // ← 처음에는 작은 숫자로 시험해 보세요 ... };
-
사진이 순차적으로 삭제됩니다. 작업이 끝날 때까지 이 탭을 화면 앞에 두세요.
해당 구글 계정에서 사진을 처음 삭제하는 경우, 아래와 같은 안내창이 한 번 나타납니다.
항목을 휴지통으로 이동
Google 계정, 백업이 사용 설정된 기기, Google 포토 내에서 내가 공유한 장소에서
사진과 동영상이 삭제됩니다. 다른 기기에서는 사진과 동영상이 삭제되었는지
검토해야 할 수도 있습니다. [자세히 알아보기]
[취소] [확인]
스크립트가 이 창을 알아서 처리하므로 그대로 두시면 됩니다.
본문의 자세히 알아보기 는 눌러도 삭제가 진행되지 않는 도움말 링크라서,
스크립트가 절대 누르지 않도록 해 두었습니다.
이 안내는 삭제를 한 번 완료할 때까지 계속 나옵니다.
취소 를 누르면 다음 시도에서 다시 나오고, 확인 을 눌러 삭제가 실제로
완료되면 그 뒤로는 나오지 않습니다.
첫 삭제일 때는 창이 두 번 뜬다는 점에 유의하세요.
| 뜨는 창 | |
|---|---|
| 첫 삭제 | ① 위 안내창 [취소/확인] → ② 일반 확인창 [취소/휴지통으로 이동] |
| 그 뒤로는 | 일반 확인창 하나 |
②번 일반 확인창은 이런 내용입니다.
Google 계정, 백업이 사용 설정된 기기, Google 포토 내에서 내가 공유한
장소에서 삭제하시겠습니까? Google 계정 스토리지에서 4.5MB가 복구됩니다.
[취소] [휴지통으로 이동]
스크립트는 더 이상 창이 뜨지 않을 때까지 이어서 처리하므로 두 경우 모두 정상 동작합니다.
스크립트가 시작할 때 열려 있는 창을 발견하면 취소 를 눌러 안전하게 닫고
정상 절차대로 다시 진행합니다. 무슨 창인지 알 수 없는 상태에서 확인 을 누르면
의도하지 않은 동작이 실행될 수 있기 때문입니다.
구글 포토는 탭이 백그라운드에 있으면 클릭을 즉시 처리하지 않고 미뤄 둡니다. 그 상태로는 "선택은 했는데 아무 일도 일어나지 않는" 것처럼 보이고, 나중에 탭을 다시 열면 밀렸던 동작이 한꺼번에 실행됩니다.
스크립트는 이 상태를 감지하면 스스로 멈추고 기다립니다. 탭을 다시 앞으로 가져오면 자동으로 이어서 진행합니다.
콘솔에 다음을 입력하세요.
window.__gpStop = true스크립트 위쪽 CONFIG 에서 조정할 수 있습니다.
| 항목 | 설명 |
|---|---|
dryRun |
true 면 아무것도 지우지 않고 동작만 확인합니다. 기본값 true |
maxImageCount |
삭제할 사진 수. 전체는 'ALL_PHOTOS', 개수를 정하려면 숫자 |
deleteCycle |
삭제 주기 간격(ms). 인터넷이 느리면 늘리세요 |
buttonDelay |
버튼을 누른 뒤 대기 시간(ms) |
maxCycles |
무한 반복 방지용 상한 |
인터넷이 느려 중간에 실패한다면 deleteCycle 과 buttonDelay 를 늘린 뒤,
페이지를 새로고침하고 스크립트를 다시 실행하세요.
구글이 화면 구조를 바꾸면 스크립트가 버튼을 못 찾을 수 있습니다. 이때 콘솔에 어느 단계에서 실패했는지 표시되니, 그 메시지를 먼저 확인하세요.
Warning: Don't paste code into the DevTools Console... 경고가 뜨면서 붙여넣기가
막힌 경우입니다. 콘솔에 allow pasting 을 직접 타이핑하고 Enter 를 누르세요.
자세한 내용은 위의 붙여넣기가 막힐 때 항목을 참고하세요.
- 구글 포토에서 사진을 하나만 선택합니다.
- 상단에 나타난 휴지통 아이콘을 우클릭 → 검사를 누릅니다.
- 선택된
<button>태그의aria-label값을 확인합니다. - 스크립트 위쪽
SELECTORS.deleteButtonLabels배열에 그 값을 추가합니다.
const SELECTORS = {
...
deleteButtonLabels: ['휴지통으로 이동', '새로 확인한 값', 'Delete'],
...
};대개는 탭이 화면 앞에 없어서 생기는 문제입니다. 탭을 활성 상태로 두고 페이지를 새로고침한 뒤 다시 실행해 보세요.
그래도 안 되면 사진 타일의 체크박스 클래스(.ckGgle)가 바뀐 경우입니다.
사진 위에 마우스를 올렸을 때 나타나는 동그란 체크 표시를 검사해서
클래스명을 확인하고 SELECTORS.checkbox 를 고치세요.
대화상자에 표시된 버튼 문구를 SELECTORS.confirmTexts 배열에 추가하세요.
이슈로 알려 주시거나 풀 리퀘스트를 보내 주시면 반영하겠습니다. 급하시면 포크해서 바로 쓰셔도 됩니다.
이슈를 남기실 때 아래 정보를 함께 적어 주시면 도움이 됩니다.
- 콘솔에 표시된 오류 메시지 전체
- 구글 포토 표시 언어
- 브라우저와 버전





