Ethem Efe 108

Bilgin
Katılım
11 Nisan 2024
Mesajlar
5.937
Çözümler
11
Beğeniler
3.559
Yer
KKTC | Gazimağusa
İyi akşamlar,

Binlerce yorumum var, 3-5 sene öncesine dayanan; hepsini silmek istiyorum ancak tek tek silmek inanılmaz uzun sürecektir.

Script ile vs. yapma yolu var mı? Varsa nasıl yapabilirim? Şimdiden teşekkürler.
 
Sırf buna çözüm bulamadığım için kaç yıllık hesabımı kapatıp sıfırdan bir hesap açmıştım. Araştırdığımda bir yolunun olmadığına karar verdiğimi hatırlıyorum ama 2-3 yıl oldu.
 
Tampermonkey Script'leri var ama aktif olanı var mıdır bilmiyorum. Tampermonkey'de çoğu şeyde çalışıyor yani.
 
Riskli olmasın, hesap falan gitmesin?

@Ethem Efe ben direkt hesabı silmiştim.
Riskli olduğunu sanmıyorum. Hesabı silme söz konusu değil pek ya, çok fazla şey var içerisinde.

Tampermonkey Script'leri var ama aktif olanı var mıdır bilmiyorum. Tampermonkey'de çoğu şeyde çalışıyor yani.
Zahmet olmazsa nasıl yapılacağını anlatabilir misiniz?
 
Riskli olduğunu sanmıyorum. Hesabı silme söz konusu değil pek ya, çok fazla şey var içerisinde.

Zahmet olmazsa nasıl yapılacağını anlatabilir misiniz?

Tampermonkey indiriyorsun daha sonrasında Instagram sayfasındayken eklentinin üstüne tıklayıp yeni betik oluştur basıyorsun. GitHub'dan bulduğun scripti buraya girip CTRL+S basarak kaydedersen tekrar bastığında o scripti kullanabiliyorsun.

Mesela bu 4 ay önceki bir script ama fixlendimi bilmiyorum.

Riskli olmasın, hesap falan gitmesin?

Kodun içini görebiliyorsun yani script kapalı bir eklenti gibi çalışmıyor. En kötü scriptin içini kopyalayıp yapay zekâ ile ne yaptığını doğrulayabilirsin çünkü temelde js kullanıyor.
 
Tampermonkey indiriyorsun daha sonrasında Instagram sayfasındayken eklentinin üstüne tıklayıp yeni betik oluştur basıyorsun. GitHub'dan bulduğun scripti buraya girip CTRL+S basarak kaydedersen tekrar bastığında o scripti kullanabiliyorsun.

Mesela bu 4 ay önceki bir script ama fixlendimi bilmiyorum.



Kodun içini görebiliyorsun yani script kapalı bir eklenti gibi çalışmıyor. En kötü scriptin içini kopyalayıp yapay zekâ ile ne yaptığını doğrulayabilirsin çünkü temelde js kullanıyor.
Çalışmıyor maalesef, start script'e basıyorum ancak kapanıyor kendiliğinden.

@Loutermilch @erdym @fortunee
Güncelleme olması açısından yazıyorum. İnternette denediğim hiçbir script işe yaramadı, Reddit'ten bir script buldum ancak o da doğru düzgün çalışmıyordu. Ancak ChatGPT ile biraz baktıktan sonra scripti çalışır hâle getirdim.

Tarayıcınızda İnstagram üzerinden, geçmiş kısmından yorumlarınızı açtıktan sonra, konsola bunu yazmanız hâlinde çalışmaya başlıyor. Şu an 3-5 saattir benim yorumlarım siliniyor. Gece yarısına kadar hepsi silinmiş olur diye tahmin ediyorum.


;(async function () {
const DELETION_BATCH_SIZE = 12
const DELAY_BETWEEN_ACTIONS_MS = 1500
const DELAY_BETWEEN_CHECKBOX_CLICKS_MS = 300
const DELAY_AFTER_SELECT_CLICK_MS = 8000
const DELAY_AFTER_COMMENTS_VISIBLE_MS = 2000
const MAX_RETRIES = 60

const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms))

const waitForElement = async (selector, timeout = 30000) => {
const startTime = Date.now()

while (Date.now() - startTime < timeout) {
const element = document.querySelector(selector)

if (element) return element

await delay(100)
}

throw new Error(
Element with selector "${selector}" not found within ${timeout}ms
)
}

const clickElement = async (element) => {
if (!element) throw new Error('Element not found')

element.scrollIntoView({
behavior: 'smooth',
block: 'center'
})

await delay(300)
element.click()
}

// "Something went wrong" penceresi çıkarsa OK butonuna bas
const clickErrorOK = async () => {
const elements = [
...document.querySelectorAll('button'),
...document.querySelectorAll('[role="button"]')
]

const okButton = elements.find((el) => {
const text = (el.innerText || el.textContent || '').trim()

return (
text === 'OK' &&
el.offsetParent !== null
)
})

if (okButton) {
console.log('⚠️ "Something went wrong" bulundu, OK tıklanıyor...')

await clickElement(okButton)
await delay(2000)

return true
}

return false
}

const waitForSelectButton = async () => {
const selectButton = [...document.querySelectorAll('span')]
.find((el) =>
['Select', 'Waehlen'].includes(el.textContent.trim())
)

return
}

const deleteSelectedComments = async () => {
try {
const deleteButton = [...document.querySelectorAll('span')]
.find((el) =>
['Delete', 'Löschen'].includes(el.textContent.trim())
)

if (!deleteButton) {
throw new Error('Delete button not found')
}

await clickElement(deleteButton)
await delay(DELAY_BETWEEN_ACTIONS_MS)

const confirmButton = await waitForElement(
'button[tabindex="0"]'
)

await clickElement(confirmButton)

// Silme işleminden sonra hata penceresi çıkabilir
await delay(2000)
await clickErrorOK()

} catch (error) {
console.error(
'Error during comment deletion:',
error.message
)
}
}

const scrollAndWaitForMoreComments = async (previousCount) => {
window.scrollTo(
0,
document.body.scrollHeight
)

for (let i = 0; i < 10; i++) {
await delay(1000)

const currentCount =
document.querySelectorAll(
'[aria-label="Toggle checkbox"]'
).length

if (currentCount > previousCount) {
return true
}
}

return false
}

const deleteActivity = async () => {
try {
while (true) {
await delay(10000)

// Hata penceresi varsa önce OK'ye bas
const errorHandled = await clickErrorOK()

if (errorHandled) {
continue
}

const selectButton = Array.from(
document.querySelectorAll('span')
).find(
(el) =>
el.textContent.trim() === 'Select'
)

if (!selectButton) {
throw new Error(
'[INFO] Select button not found'
)
}

await clickElement(selectButton)

await delay(
DELAY_AFTER_SELECT_CLICK_MS
)

let checkboxes =
document.querySelectorAll(
'[aria-label="Toggle checkbox"]'
)

if (checkboxes.length === 0) {
const gotMore =
await scrollAndWaitForMoreComments(0)

if (!gotMore) {
console.log(
'🚫 No more comments to delete.'
)

break
}

continue
}

await delay(
DELAY_AFTER_COMMENTS_VISIBLE_MS
)

for (
let i = 0;
i <
Math.min(
DELETION_BATCH_SIZE,
checkboxes.length
);
i++
) {
await clickElement(checkboxes)

await delay(
DELAY_BETWEEN_CHECKBOX_CLICKS_MS
)
}

await delay(
DELAY_BETWEEN_ACTIONS_MS
)

await deleteSelectedComments()

// Bir hata penceresi sonradan açıldıysa tekrar kontrol et
await delay(1000)
await clickErrorOK()

await delay(
DELAY_BETWEEN_ACTIONS_MS
)

await waitForSelectButton()

await delay(
DELAY_BETWEEN_ACTIONS_MS
)
}

} catch (error) {
console.error(
'Error in deleteActivity:',
error.message
)
}
}

// Start script
try {
let delay = 0

while (true) {
delay += 1

if (delay % 100 == 0) {
await deleteActivity()
}
}

console.log(
'✅ All comments deleted or none left to delete.'
)

} catch (error) {
console.error(
'Fatal error:',
error.message
)
}
})()
 
Son düzenleme:
Çalışmıyor maalesef, start script'e basıyorum ancak kapanıyor kendiliğinden.

@Loutermilch @erdym @fortunee
Güncelleme olması açısından yazıyorum. İnternette denediğim hiçbir script işe yaramadı, Reddit'ten bir script buldum ancak o da doğru düzgün çalışmıyordu. Ancak ChatGPT ile biraz baktıktan sonra scripti çalışır hâle getirdim.

Tarayıcınızda İnstagram üzerinden, geçmiş kısmından yorumlarınızı açtıktan sonra, konsola bunu yazmanız hâlinde çalışmaya başlıyor. Şu an 3-5 saattir benim yorumlarım siliniyor. Gece yarısına kadar hepsi silinmiş olur diye tahmin ediyorum.


;(async function () {
const DELETION_BATCH_SIZE = 12
const DELAY_BETWEEN_ACTIONS_MS = 1500
const DELAY_BETWEEN_CHECKBOX_CLICKS_MS = 300
const DELAY_AFTER_SELECT_CLICK_MS = 8000
const DELAY_AFTER_COMMENTS_VISIBLE_MS = 2000
const MAX_RETRIES = 60

const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms))

const waitForElement = async (selector, timeout = 30000) => {
const startTime = Date.now()

while (Date.now() - startTime < timeout) {
const element = document.querySelector(selector)

if (element) return element

await delay(100)
}

throw new Error(
Element with selector "${selector}" not found within ${timeout}ms
)
}

const clickElement = async (element) => {
if (!element) throw new Error('Element not found')

element.scrollIntoView({
behavior: 'smooth',
block: 'center'
})

await delay(300)
element.click()
}

// "Something went wrong" penceresi çıkarsa OK butonuna bas
const clickErrorOK = async () => {
const elements = [
...document.querySelectorAll('button'),
...document.querySelectorAll('[role="button"]')
]

const okButton = elements.find((el) => {
const text = (el.innerText || el.textContent || '').trim()

return (
text === 'OK' &&
el.offsetParent !== null
)
})

if (okButton) {
console.log('⚠️ "Something went wrong" bulundu, OK tıklanıyor...')

await clickElement(okButton)
await delay(2000)

return true
}

return false
}

const waitForSelectButton = async () => {
const selectButton = [...document.querySelectorAll('span')]
.find((el) =>
['Select', 'Waehlen'].includes(el.textContent.trim())
)

return
}

const deleteSelectedComments = async () => {
try {
const deleteButton = [...document.querySelectorAll('span')]
.find((el) =>
['Delete', 'Löschen'].includes(el.textContent.trim())
)

if (!deleteButton) {
throw new Error('Delete button not found')
}

await clickElement(deleteButton)
await delay(DELAY_BETWEEN_ACTIONS_MS)

const confirmButton = await waitForElement(
'button[tabindex="0"]'
)

await clickElement(confirmButton)

// Silme işleminden sonra hata penceresi çıkabilir
await delay(2000)
await clickErrorOK()

} catch (error) {
console.error(
'Error during comment deletion:',
error.message
)
}
}

const scrollAndWaitForMoreComments = async (previousCount) => {
window.scrollTo(
0,
document.body.scrollHeight
)

for (let i = 0; i < 10; i++) {
await delay(1000)

const currentCount =
document.querySelectorAll(
'[aria-label="Toggle checkbox"]'
).length

if (currentCount > previousCount) {
return true
}
}

return false
}

const deleteActivity = async () => {
try {
while (true) {
await delay(10000)

// Hata penceresi varsa önce OK'ye bas
const errorHandled = await clickErrorOK()

if (errorHandled) {
continue
}

const selectButton = Array.from(
document.querySelectorAll('span')
).find(
(el) =>
el.textContent.trim() === 'Select'
)

if (!selectButton) {
throw new Error(
'[INFO] Select button not found'
)
}

await clickElement(selectButton)

await delay(
DELAY_AFTER_SELECT_CLICK_MS
)

let checkboxes =
document.querySelectorAll(
'[aria-label="Toggle checkbox"]'
)

if (checkboxes.length === 0) {
const gotMore =
await scrollAndWaitForMoreComments(0)

if (!gotMore) {
console.log(
'🚫 No more comments to delete.'
)

break
}

continue
}

await delay(
DELAY_AFTER_COMMENTS_VISIBLE_MS
)

for (
let i = 0;
i <
Math.min(
DELETION_BATCH_SIZE,
checkboxes.length
);
i++
) {
await clickElement(checkboxes)

await delay(
DELAY_BETWEEN_CHECKBOX_CLICKS_MS
)
}

await delay(
DELAY_BETWEEN_ACTIONS_MS
)

await deleteSelectedComments()

// Bir hata penceresi sonradan açıldıysa tekrar kontrol et
await delay(1000)
await clickErrorOK()

await delay(
DELAY_BETWEEN_ACTIONS_MS
)

await waitForSelectButton()

await delay(
DELAY_BETWEEN_ACTIONS_MS
)
}

} catch (error) {
console.error(
'Error in deleteActivity:',
error.message
)
}
}

// Start script
try {
let delay = 0

while (true) {
delay += 1

if (delay % 100 == 0) {
await deleteActivity()
}
}

console.log(
'✅ All comments deleted or none left to delete.'
)

} catch (error) {
console.error(
'Fatal error:',
error.message
)
}
})()
Keşke gözü karartıp 8 yıllık hesabımı silmeden önce haberim olsaydı.