@lina Вместо
body.textContent = body.textContent.replaceAll('a', 'b');тогда уже будет нужно что-то типа
var snap = document.evaluate('.//text()', body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (let i = 0; i < snap.snapshotLength; i++) { const node = snap.snapshotItem(i); if (!node.textContent || node.parentNode.closest('a') || node.parentNode.closest('.full')) { continue; } node.textContent = node.textContent.replaceAll('a', 'b'); }чтобы обрабатывать только каждую непустую текстовую ноду в отдельности, при условии что она не имеет родителем a-элемент, либо скрытый диалог с полным именем юзера.