如何批量删除我的 Google Voice 历史记录?

如何批量删除我的 Google Voice 历史记录?

如何使用 JavaScript 快速批量删除所有 Google Voice 消息?

答案1

在浏览器的 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();

答案2

编辑:它循环进行,但不会删除..

仅在 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 并结束进程。

我开始玩这个代码,但在输入变量以查看它是否能工作时,得到了一个“未定义”,而不删除所有内容“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 是内部服务器错误。我将尝试不同的方法。

答案3

尝试另一种方法https://voice.google.com/u/1/voicemail?itemId=c.LONG_STRING并使用 WrapAPI。获取长字符串 ID 后,我认为您可以将其用作 POST 数据标头中的唯一内容,以便:https://content.googleapis.com/voice/v1/voiceclient/thread/delete

获取 ID 并不容易。我尝试过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

我想删除我的整个谷歌语音历史记录。但又不想把它扔进垃圾箱 https://support.google.com/voice/thread/6331069?hl=en

如何删除多个电话或短信? http://support.google.com/voice/thread/26118990?hl=en

答案4

应该能够使用键盘快捷键编写脚本。 #删除当前消息,但会出现确认对话框。 <Tab><Tab>选择删除按钮,<Enter>删除该消息并前进到下一条。

相关内容