async function deleteAllTwitterMedia() {
let processedItems = new Set();
console.log('미디어 삭제를 시작');
while (true) {
const items = Array.from(document.querySelectorAll('li[role="listitem"]'))
.filter(item => /^verticalGridItem-\d+-profile-grid-0$/.test(item.id) && !processedItems.has(item.id));
if (items.length === 0) {
console.log('페이지 스크롤');
window.scrollBy(0, window.innerHeight);
await new Promise(r => setTimeout(r, 2000));
const visibleItems = document.querySelectorAll('li[role="listitem"]').length;
if (visibleItems === 0) {
console.log('작업 종료');
break;
}
continue;
}
for (const item of items) {
const itemId = item.id;
processedItems.add(itemId);
const link = item.querySelector('a[role="link"]');
if (link) {
link.click();
console.log(`삭제 시작: ${itemId}`);
await new Promise(r => setTimeout(r, 1000));
const moreBtn = document.querySelector('button[aria-label="더 보기"]');
if (moreBtn) {
moreBtn.click();
await new Promise(r => setTimeout(r, 500));
const deleteMenu = Array.from(document.querySelectorAll('div[role="menuitem"]'))
.find(el => el.textContent.includes('삭제하기'));
if (deleteMenu) {
deleteMenu.click();
await new Promise(r => setTimeout(r, 500));
const confirmBtn = document.querySelector('button[data-testid="confirmationSheetConfirm"]');
if (confirmBtn) {
confirmBtn.click();
await new Promise(r => setTimeout(r, 1000));
item.remove();
console.log(`항목 제거됨: ${itemId}`);
} else {
console.warn('삭제 확인 버튼 없음');
}
} else {
console.warn('삭제하기 메뉴 없음');
}
} else {
console.warn('더 보기 버튼 없음');
}
} else {
console.warn('항목 내 링크 없음');
}
await new Promise(r => setTimeout(r, 1500)); // 삭제 간격 대기
}
console.log('삭제 작업 완료. 페이지를 스크롤하여 추가 미디어 로드 중...');
window.scrollBy(0, window.innerHeight);
await new Promise(r => setTimeout(r, 3000));
}
console.log('삭제 완료!');
}
deleteAllTwitterMedia();
본인 프로필 - 미디어 탭!! 을 켠 상태에서 써주셔야해요
F12 눌러서 콘솔창 연 다음에 위 코드를 써줍니다
마지막 한 줄이 삭제 시작이니까 참고!!!
중간중간 다른 페이지로 튀거나 조금 손이 가기도 하니까 주의해서 사용해주세요 ~.~