;(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
)
}
})()