Как массово удалить историю Google Voice?
Как использовать JavaScript для быстрого массового удаления всех моих сообщений Google Voice?
4 ответа
Запустите это в консоли JavaScript вашего браузера:
// Code to be run at Legacy Google Voice
// Run at: https://www.google.com/voice/b/0#history
// https://www.google.com/voice/b/0#spam
// https://www.google.com/voice/b/0#trash
function sleep(ms) { // courtesy: https://stackoverflow.com/a/39914235/1429450
return new Promise(resolve => setTimeout(resolve, ms));
}
async function deleteMessages() {
do {
// Get message IDs.
var msgs = document.getElementsByClassName("gc-message"),
msgids = [];
itemcount = msgs.length;
for (var i = 0; i < itemcount; ++i) {
msgids.push(msgs[i].id);
};
// Construct form. courtesy: https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects#Creating_a_FormData_object_from_scratch
try {
var formData = new FormData();
for (var i in msgids) {
formData.append("messages", msgids[i]);
}
formData.append("_rnr_se", _gcData["_rnr_se"]);
var request = new XMLHttpRequest();
request.open("POST", "https://www.google.com/voice/b/0/inbox/deleteForeverMessages/");
request.send(formData);
} catch (a) {
return;
}
await sleep(1000);
try {
document.getElementById("gc-inbox-next").click();
} catch (b) {
try {
document.getElementById("gc-inbox-prev").click();
} catch (c) {
continue;
}
}
await sleep(1000);
} while (itemcount != 0);
}
deleteMessages();
РЕДАКТИРОВАТЬ: он проходит, но не удаляет..
Испытал это только на "устаревшей" версии GV. Щелкните "Использовать устаревшую версию". Его URL-адрес начинается с https://www.google.com/voice вместо voice.google.com.
Чтобы удалить все, кроме последних x дней, нажмите "Следующая страница" внизу, и URL-адрес изменится, и в конце будет добавлено "inbox/p1". Меняйте номер, пока не найдете страницу с последними сообщениями, которые хотите сохранить; Пользуюсь 6 месяцев назад.
Код @Geremia великолепен, но в нем есть опечатка, поэтому удалите} над вторым словом "await sleep". Также удалите "try {document.getElementById("gc-inbox-prev"). Click();} catch (c) {", который удаляет назад в истории до текущего момента.
Теперь нажмите Ctrl+Shift+i или щелкните правой кнопкой мыши и выберите "Проверить источник". Щелкните вкладку "Источники" в консоли JS, затем стрелки >> рядом с полями "Страница и файловая система", а затем "Фрагменты". Вставьте код функции и нажмите Ctrl+Enter для запуска. Нажмите значок паузы также под источниками, чтобы остановить бесконечные циклы. Кроме того, вы должны вручную завершить его, нажав "Пауза" в разделе "Источники" или Ctrl+Esc и завершив процесс.
Я начал играть с этим кодом, но получил "undefined" при вводе переменной, чтобы посмотреть, как это будет работать, без удаления всего "var msgs = document.getElementsByClassName("gc-message")". Согласно этому ответу, он делает это обычно, я думаю, потому что он не возвращает значение (https://stackoverflow.com/questions/24342748/why-does-console-log-say-undefined-and-then-the-correct-value). Я добрался до того места, где мне нужно было приостановить цикл while, и вернулся к коду Geremias. А потом понял, что он сделает то, что я хотел, с небольшими ручными манипуляциями со страницами. Но вот код, который работал, чтобы автоматически проходить каждую страницу до нужной даты, чтобы начать удаление. Код Geremias работает путем удаления всей страницы сообщений и последующей перезагрузки, поэтому мой код может работать, чтобы найти отправную точку для этого, если кто-то захочет завершить его для других. Или вы можете просто сделать это вручную.
var dateLast = new Date(document.getElementsByClassName('gc-message-time')[0].innerText)
var dateNow = new Date()
var dateCutoff = new Date(dateNow - 30*24*60*60*1000)
while (dateLast > dateCutoff) {
document.getElementById('gc-inbox-next').click();
var dateLast = new Date(document.getElementsByClassName('gc-message-time')[0].innerText)
await sleep(1000)
}
Существует также связанный с этим вопрос: https://webapps.stackexchange.com/questions/55378/how-do-i-delete-text-messages-from-google-voice/
var msgs = document.getElementsByClassName("gc-message"), msgids = []; msgids
msgids.push(msgs[0].id)
var formData = new FormData()
formData.append("messages", msgids[0])
formData.append("_rnr_se", _gcData["_rnr_se"])
for (var pair of formData.entries()) {
console.log(pair[0]+ ', ' + pair[1]);
}
var request = new XMLHttpRequest();
request.open("POST", "https://www.google.com/voice/b/0/inbox/deleteForeverMessages/");
request.send(formData);
returns:.. POST https://www.google.com/voice/b/0/inbox/deleteForeverMessages/ 500
500 - это внутренняя ошибка сервера. Я попробую другой подход..
Пробуем другой подход на https://voice.google.com/u/1/voicemail?itemId=c.LONG_STRING и используя WrapAPI. Как только вы получите длинный идентификатор строки, я думаю, вы можете использовать его как единственный контент в заголовке данных для POST: https://content.googleapis.com/voice/v1/voiceclient/thread/delete
Получить идентификаторы непросто. Я пытался
document.querySelector("#messaging-view > div > md-content > div > gv-conversation-list > md-virtual-repeat-container > div > div.md-virtual-repeat-offsetter > div:nth-child(2) > div")
и вручную выбрав его, и этот объект появится
$0.$gvCtrlRef
но я не могу получить
data-thread-id
из любого, кроме
innerHTML
который мне пришлось бы разобрать на
data-thread-id=
.
Я думаю, что, потратив на это больше дня, будет легче удалить всю мою учетную запись и просто потребовать мой номер на другом.
Возможно, можно использовать Selenium, но я не могу войти, потому что Google говорит, что Chromedriver небезопасен. Я попытался использовать несколько описанных здесь решений: https://stackoverflow.com/a/61219342/4240654, но безуспешно. Новые учетные записи, похоже, имеют меньше проблем с этим, как описано здесь (https://stackoverflow.com/questions/59380356/how-to-handle-browser-or-app-may-not-be-secure-issue-with-web-driver-selenium-py).
Для справки, вот соответствующие темы службы поддержки Google:
Как массово удалять звонки / сообщения из Google Voice https://support.google.com/voice/forum/AAAAjq5-_rM4iYc83j4mRo?hl=en
Я хочу удалить всю свою историю голоса Google. не отправляя его в корзину https://support.google.com/voice/thread/6331069?hl=en
Как удалить несколько телефонных звонков или текстовых сообщений? http://support.google.com/voice/thread/26118990?hl=en
Должен быть в состоянии написать это с помощью сочетаний клавиш.#
удаляет текущее сообщение, но появляется диалоговое окно подтверждения.<Tab><Tab>
выбирает кнопку удаления и<Enter>
удаляет сообщение и переходит к следующему.