Another way to get bachngocsach vip text

Another way to getbachngocsach vip text

// ==UserScript==
// @name         Another way to get bachngocsach vip text
// @namespace    Name cmn space
// @description  Another way to getbachngocsach vip text
// @version      0.1.0
// @author       You
// @match        https://*.bachngocsach.com/*
// @match        https://bachngocsach.vip/*
// @run-at       document-start
// ==/UserScript==

let observer;

document.addEventListener('DOMContentLoaded',()=>{
    setTimeout(()=>{
        console.table(gettextList(document.body));
        observer = new MutationObserver((mList)=>{ mList.forEach((el)=>{if(el) gettextList(el)})})
        observer.observe(document,{childList:true, subtree:true,characterData:true});
    },4000)
 });

function gettextList(el=document.body) {
    const textList=[];
    textList.toString=()=>{ return textList.reduce((s,n)=>s+=n.nodeValue,'') }
    const treeWalker= document.createTreeWalker(el,NodeFilter.SHOW_TEXT,(node)=>{
        if (['META','SCRIPT','NOSCRIPT','STYLE','AREA','BASE','CANVAS','CODE','EMBED','LINK','MAP','PARAM','SOURCE','VIDEO','IMG','PICTURE','INPUT','TEXTAREA'].includes(node.parentNode?.tagName))
            return NodeFilter.FILTER_REJECT;
        return NodeFilter.FILTER_ACCEPT;
    });
    let node;
    while (node = treeWalker.nextNode())
        textList.push(node);
    console.log(textList.toString());
    GM.setClipboard(textList.toString(), 'text/plain');
    return textList;
}