function initContents(elements, tier) {

    for (element of elements) {

        if (element.className === 'comment-wrapper') {

            initContents(element.children, tier + 1);

        }

        else if(element.className === 'comment-item') {

            contents.push(element.querySelector('.content'));

            replyTiers.push(tier);

        }

    }

}


let listArea = document.querySelector('.list-area');

let contents = [];

let replyTiers = [];

initContents(listArea.children, -1);


let s = '순번\t닉네임\t아이피/번호\t타입\t글 작성자\t작성일\t답글\t수정\t내용\n';

for (let i = 0; i < contents.length; i++) {

        let name;

        let nameNum = '';

        let nameType;

        // dynamic

        if (contents[i].querySelector('.info-row > .user-info > a') === null) {

            [name, nameNum] = contents[i].querySelector('.info-row > .user-info > span').attributes['data-filter'].value.split(', ');

            nameType = '유동';

        }

        // non-dynamic

        else {

            name = contents[i].querySelector('.info-row > .user-info > a').attributes['data-filter'].value;

            if (name.includes('#')) {

                [name, nameNum] = name.split('#');

                nameType = '반고닉';

            }

            else {

                nameType = '고닉';

            }

        }

        

        let authorType = '';

        // post author

        if (contents[i].querySelector('.info-row > .author') !== null) {

            authorType = 'O';

        }

        

        let time;

        time = contents[i].querySelector('.info-row > .right > time').textContent;

        

    let msg = '';

        // non-acacon

        if (contents[i].querySelector('.message > .text') !== null) {

            msg = contents[i].querySelector('.message > .text').textContent;

        }

        // acacon

        else {

            // non-gif

            if (contents[i].querySelector('.message > .emoticon-wrapper > img') !== null) {

                msg = '아카콘#' + contents[i].querySelector('.message > .emoticon-wrapper > img').attributes['data-id'].value;

            }

            // gif

            else {

                msg = '아카콘#' + contents[i].querySelector('.message > .emoticon-wrapper > video').attributes['data-id'].value;

            }

        }

        // link

        if (contents[i].querySelector('.text.d-none') !== null) {

            msg = contents[i].querySelector('.text.d-none > pre > a').href;

        }

        

        let modified = '';

        // modified

        if (contents[i].querySelector('.message > .modified') !== null) {

            modified = 'O';

        }

        

        let replyTier = '';

        // non-reply

        if (replyTiers[i] > 0) {

            replyTier = replyTiers[i];

        }

        // reply for deleted comment

        else if (contents[i].querySelector('.message > .ion-backspace') !== null) {

            replyTier = '삭제됨';

        }

        msg = msg.replaceAll('\n', ' \\n ');

        

        s += i + 1;

    s += '\t' + name;

        s += '\t' + nameNum;

        s += '\t' + nameType;

        s += '\t' + authorType;

        s += '\t' + time;

        s += '\t' + replyTier;

        s += '\t' + modified;

        s += '\t' + msg;

        s += '\n';

}

console.log(s);




0. 크롬 기반 브라우저를 켬 (크롬 말고 안써봄)

1. 개발자모드를 켬 ( F12 또는 Ctrl + Shift + i )

2. console 탭으로 감

3. 위 코드를 복붙하면 결과가 나옴

4. 결과를 엑셀에 복붙하면 잘 정돈된채로 옮겨짐





위 댓글로 테스트





개발자 도구 - 콘솔에서 붙여넣기 했더니 결과가 나옴





그대로 엑셀에 붙여넣기 하면 위와 같이 나옴


아이피/번호는 유동 아이피 or 반고닉 번호

답글은 몇번째 레벨 답글인지 표시함

만약 원래 댓글이 지워져서 붕 떠버린 답글은 삭제됨이라고 표시됨

수정된 댓글이면 '수정됨' 열에 O로 표시됨