导出Microsoft Teams聊天到文件存档



有人曾设法保存整个聊天记录吗从微软团队的任何文件格式(包括聊天图像,如截图,用户头像等)?

我在所有的浏览器中都试过了。

问题似乎是Teams从内存中删除了当前视口中不包含的所有文本,甚至更多的是图像。

这看起来像延迟加载,但显然不是,因为它不能通过禁用浏览器中的延迟加载选项来阻止(在Chrome和Firefox中,使用基于浏览器的Teams版本)。

只显示和加载当前视口的内容。当滚动时,所有其他向上和向下的内容都会立即卸载。因此,不能以任何方式分别选择、保存或导出整个聊天,甚至不能复制到剪贴板:

当滚动

时,视口外的内容立即被卸载

这是我想到的一些在Chrome控制台工作的意大利面条-它滚动到你所选择的任何聊天的顶部,然后一块一块地沿着线,创建一个可打印/可保存的副本。甚至可以加载所有的内联图片。

唯一的问题是,真正长的聊天记录需要一段时间才能滚动到开始。

所以是的,要使用,只需打开Chrome控制台窗口(Ctrl+Shift+J)复制并粘贴这个,然后按enter。然后等着它变魔术。

let xxx = 0;
let ddd = 0;
let fullpage1 = '' 
fullpage1 = '<h1 id="chat-header-title2">'+jQuery('#chat-header-title').html()+'</h1>';
//**********************************************
//Go to top of page
jj234 = function() {

jQuery("virtual-repeat").scrollTop(-2000);

if (xxx < 50) {setTimeout(jj234, 50); } else {setTimeout(ScrollDownTakeNote, 1000); }
if (jQuery("virtual-repeat").hasClass("not-at-top")) {xxx = 0;} else {xxx += 1;} 
}
jj234();

//Create a place to hold a copy of the content
jQuery("body").append('<div id="thebigdiv" style="z-index: 10000; overflow: auto; background: white;"></div>');

//*************************************************
//Scroll down the chat, once things load, copy it to the temp location, removing some dynamic content
ScrollDownTakeNote = function() {
if (jQuery('.disable-event').length==0 && jQuery('.ts-image .loading').length==0) {
ddd += 1;
jQuery("#thebigdiv").append('<div id="boxdiv'+ddd+'"></div>');
jQuery("virtual-repeat div.clearfix").each( function () {
jQuery("#boxdiv"+ddd).append('<div class="messageClip" id="'+jQuery(this).attr('id')+'">' + jQuery(this).html() + '</div>');
});
jQuery("#boxdiv"+ddd+" [data-tid]").attr("data-tid","");
jQuery("#boxdiv"+ddd+" [ng-if]").attr("ng-if","");
jQuery("#boxdiv"+ddd+" [ng-class]").attr("ng-class","");
jQuery("#boxdiv"+ddd+" [ng-source]").attr("ng-source","");
jQuery("#boxdiv"+ddd+" [ng-class]").attr("ng-class","");
jQuery("#boxdiv"+ddd+" [simple-mouseenter]").attr("simple-mouseenter","");
jQuery("#boxdiv"+ddd+" [ng-mouseleave]").attr("ng-mouseleave","");
jQuery("#boxdiv"+ddd+" [message-view-model]").attr("message-view-model","");
jQuery("#boxdiv"+ddd+" [message-vm]").attr("message-vm","");
jQuery("#boxdiv"+ddd+" [is-enabled]").attr("is-enabled","");
jQuery("#boxdiv"+ddd+" [host-tenant-id]").attr("host-tenant-id","");

jQuery("#boxdiv"+ddd+" [scroll-item-tracker]").attr("scroll-item-tracker","");
jQuery("#boxdiv"+ddd+" [scroll-item-id]").attr("scroll-item-id","");
jQuery("#boxdiv"+ddd+" [scroll-item-event-name]").attr("scroll-item-event-name","");
jQuery("#boxdiv"+ddd+" [is-above-view-callback]").attr("is-above-view-callback","");
jQuery("#boxdiv"+ddd+" [is-in-view-callback]").attr("is-in-view-callback","");
jQuery("#boxdiv"+ddd+" [scroll-container]").attr("scroll-container","");
jQuery("#boxdiv"+ddd+" [check-above-viewport]").attr("check-above-viewport","");
jQuery("#boxdiv"+ddd+" [delay-scroll-tracker-init]").attr("delay-scroll-tracker-init","");
jQuery("#boxdiv"+ddd+" [deferred-render-ready]").attr("deferred-render-ready","");
jQuery("#boxdiv"+ddd+" img[target-src]").each(function () {$(this).attr("lazy-load","false"); $(this).attr("src",$(this).attr("target-src"));});
jQuery("#boxdiv"+ddd+" skype-status").remove();
fullpage1 += jQuery("#thebigdiv").html();
jQuery("#thebigdiv").html(".");
jQuery("virtual-repeat.simple-scrollbar").scrollTop(jQuery("virtual-repeat.simple-scrollbar").scrollTop()+2000);
}
if  (jQuery('[data-scroll-pos="1"').length==0 || jQuery("virtual-repeat").hasClass("not-at-bottom") || jQuery('.disable-event').length>0 || jQuery('.ts-image .loading').length>0 ) {setTimeout(ScrollDownTakeNote, 500);
} else {printdiv("#thebigdiv")}
};
//**********************************
//Open a Save File dialog for the HTML source and open the print window for a Print-to-PDF
//(Why not both?)
function printdiv(printdivname) {
jQuery(printdivname).html(fullpage1);
jQuery('#outer-shell').remove();
jQuery('body').css({"overflow":"scroll"});

$('div.messageClip[id]').each(function () {
$('div.messageClip[id="' + this.id + '"]:gt(0)').remove();
});
jQuery(printdivname).css({"margin-left":"15px"});
jQuery('body').append("<style>@media print { * { overflow: visible !important; } .page { page-break-after:always; }}");
jQuery('head').append('<link rel="stylesheet" href="https://statics.teams.cdn.office.net/hashed/stylesheets.theme-defaultV2.min-86505e7.css" />');

fullpage2 = new XMLSerializer().serializeToString(document);
//fullpage2 = fullpage2.replace(/[u00A0-u9999<>&]/gim, function(i) {
//  return '&#'+i.charCodeAt(0)+';'; 
//});
saveTextAsFile(fullpage2);  
waitonimages();

}
let xasd = 0;
function waitonimages() {
xasd = 0;
jQuery("img").each(function () {if (!this.complete) { xasd+=1 }});
if (xasd == 0) {window.print()} else {setTimeout(waitonimages,1000);}   
}
function saveTextAsFile(text1)
{
//inputTextToSave--> the text area from which the text to save is
//taken from
var textToSave = text1;
var textToSaveAsBlob = new Blob([textToSave], {type:"text/html"});
var textToSaveAsURL = window.URL.createObjectURL(textToSaveAsBlob);
//inputFileNameToSaveAs-->The text field in which the user input for 
//the desired file name is input into.
var fileNameToSaveAs = jQuery('#chat-header-title2').html() + "-source.htm";
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";
downloadLink.href = textToSaveAsURL;
downloadLink.onclick = destroyClickedElement;
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
downloadLink.click();
}
function destroyClickedElement(event)
{
document.body.removeChild(event.target);
}

我遇到了同样的问题。我不能使用图形API,因为我的用户没有权限(只是一个普通的Teams用户)。

我还注意到那种"延迟加载"。我找到的解决方案是扩展视图,使所有内容都可见(并加载)。

我使用这里建议的Firefox控制台命令完成了此操作:

  1. 确保你滚动到你想要保存的聊天对话的顶部和底部
  2. 按F12打开开发人员工具
  3. 选择"控制台"选项卡;在开发人员工具
  4. 将下面的代码粘贴到控制台中,它应该缩小页面
const zoomFactor = (document.querySelector(".ts-main-flex").offsetHeight / document.querySelector(".list-wrap").offsetHeight);
document.documentElement.style.setProperty("transform", "scale(" + zoomFactor + ")");
document.documentElement.style.setProperty("transform-origin", "top");
document.documentElement.style.setProperty("min-height", (100 / zoomFactor) + "vh");
  1. 一旦页面完全加载,将下面的代码粘贴到控制台中,它应该会展开所有分组聊天。
document.querySelectorAll(".expand-collapse").forEach(link => link.click());
document.querySelectorAll(".ts-see-more-button.ts-see-more-fold").forEach(link => link.click());
  1. 将下面的代码粘贴到控制台中,它应该会调整缩放级别
const newZoomFactor = (document.querySelector(".ts-main-flex").offsetHeight / document.querySelector(".list-wrap").offsetHeight);
document.documentElement.style.setProperty("transform", "scale(" + newZoomFactor + ")");
document.documentElement.style.setProperty("min-height", (100 / newZoomFactor) + "vh");
  1. 一旦页面完全加载,粘贴下面的代码重置缩放并添加滚动条
document.documentElement.style.removeProperty("transform");
document.documentElement.style.removeProperty("transform-origin");
document.documentElement.style.setProperty("overflow", "auto");
  1. 用SingleFile保存页面
  2. 喝杯咖啡,享受时光的流逝,为你的CPU祈祷
  3. 瞧!你保存的页面应该没问题

用SingleFile保存页面对我来说效果很好。

对于很长时间的聊天,我使用SingleFileZ,这是SingleFile的一个分支,它增加了压缩并生成一个自动提取文件。在这些情况下,有些步骤花了我几个小时才完成。

您可以使用图形API与图像一起进行团队聊天,但仅限于20天的数据。你可以在20天内找到球队。此外,还有一个功能请求可以将团队聊天内容导出到外部。目前你不能导出团队聊天。你能请投票团队聊天历史导出功能,以提供这个在未来。您可以联系产品支持渠道获取更多信息

对我来说,不需要太长的聊天最简单和最好的方法是在Opera浏览器中打开聊天,然后尽可能缩小,直到整个聊天以很小的尺寸可见,然后将页面保存为PDF。

这样,你就可以得到一个带有高质量矢量文本和图像的PDF。

我发现在浏览器中打开Teams聊天可以让您选择并复制粘贴对话中的多个消息和图像。

next:在目标(MS Word)文件中使用regex-replace删除所有元信息(时间戳+名称)。

替换 '[???????????????????????

相关内容

最新更新