클리앙 본인글 삭제하는 스크립트(콘솔탭 실행)

Lv.1 배리앨런 (203.♡.92.163)

2024년 4월 19일 AM 08:14 · 수정됨(15:11)

조회 1,671 공감 0

 

 

클리앙 본인글 삭제하는 스크립트(콘솔탭 실행)

 

클리앙 본인글 삭제를 희망하시는 분들 중

아직 하지 않은 신 분들께
콘솔에서 실행하는 스크립트를 소개해 드립니다.

 

다모앙 아이디 "잡일전문가"님께서 댓글로 게시하신 내용인데
모르시는 분들이 많으신거 같아서 소개해 드립니다.

F12 콘솔탭에서 allow paste 를 먼저 하고 실행하시면 됩니다.

잡일전문가님(닉언일치 ㄷㄷㄷ)께 감사드립니다.

{emo:onion-072.gif:50}

 

출처 : https://damoang.net/qa/1513?sfl=wr_subject||wr_content&stx=콘솔 삭제&sop=and 

           하단 잡일전문가님 댓글 참조하세요

 

-------------------------------------------------------------------------------------------------------------------------


브라우저에서 그냥 하시는 방법도 좋습니다.
로그인 하신 뒤에 브라우저 콘솔에 아래 코드 붙여넣고 엔터 치시믄
브라우저 닫거나 다른 페이지로 이동하지 않는 이상 주욱 지워집니다. 빨라요.

 

 

async function getData(type, page) {
      if (type === 'likeArticles' || type === 'likeComments') page = 0;
   
      const html = await $.ajax(
        `https://www.clien.net/service/mypage/myArticle?&type=${type}&po=${page}`
      );
      const parser = new DOMParser();
      const doc = parser.parseFromString(html, 'text/html');
   
      const pagination = doc.querySelector('.board-pagination');
      const nextButton = pagination.querySelector('a.board-nav-next.ten');
      const lastButton = Array.from(pagination.querySelectorAll('a.board-nav-page')).pop();
      const lastPageNumber = lastButton.href.replace(/.*\D(\d+).*/, '$1');
      const endpoints = Array.from(
        doc.querySelectorAll(".list_myArticle a.list_subject")
      )
        .map((element) => {
          if (element.getAttribute("href") === "#") {
            return getEndpoint('deletedComments', element.getAttribute("onclick").match(/(?:')(.*?)(?:')(?:,)(.*?)(?:,)(.*?)(?:\))/))
          } else {
            return getEndpoint(type, element.href.match(/\/service\/board\/([^\/]+)\/(\d+)(?:\?[^#]+)?(?:#(\d+))?/))
          }
        }).filter(Boolean);
   
      let next = !(!nextButton && page + 1 > lastPageNumber);
      if (endpoints.length === 0 && (type === 'likeArticles' || type === 'likeComments')) {
        next = false
      }
   
      return {
        next: next,
        title: getTitle(type),
        endpoints: endpoints
      };
    }
   
    function getEndpoint(type,[_,boardCd,boardSn,commentSn]) {
      if (!boardCd || !boardSn) return;
      if (type === 'articles') return `/board/${boardCd}/delete?boardSn=${boardSn}`
      else if (type === 'comments') return `/board/${boardCd}/${boardSn}/comment/delete/${commentSn}`;
      else if (type === 'deletedComments') return `/board/${boardCd}/${boardSn}/my/comment/delete/${commentSn}`;
      else if (type === 'likeArticles') return `/board/like/${boardCd}/${boardSn}/delete`;
      else if (type === 'likeComments') return `/comment/like/${boardCd}/${boardSn}/${commentSn}`;
    }
   
    function getTitle(type) {
      if (type === 'articles') return '게시글'
      else if (type === 'comments') return '코멘트'
      else if (type === 'likeArticles') return '게시글 공감'
      else if (type === 'likeComments') return `코멘트 공감`;
    }
   
    function sendRequest(title, endpoint) {
      const url = `${API_HOST}${endpoint}`;
   
      $.ajax({
        url: url,
        type: "POST",
        success: function (result) {
          console.log(title, "삭제 성공", url);
        },
        error: async function (request) {
          var res = JSON.parse(request.responseText);
          console.error(title, "삭제 실패", url);
          console.error(res);
        },
      });
    }
   
    function delay(ms) {
      return new Promise(resolve => setTimeout(resolve, ms));
    }
   
    async function start(type, page = 1) {
      console.log(`${type} ${page} 페이지 삭제 시작`);
   
      const data = await getData(type, page -1);
   
      for (let endpoint of data.endpoints) {
        await delay(5500)
        sendRequest(data.title,endpoint)
      }
   
      await delay(3000)
      if (data.next) {
        await start(type, ++page);
      } else {
        console.log(`${data.title} 삭제가 모두 완료 되었습니다.`);
      }
    }
   
   
    await start('articles', 1);
    await start('comments');
    await start('likeArticles');
    await start('likeComments');

 

 

 

댓글 (21)

  • 후니룰스

    후니룰스 Lv.1

    24.04.19 · 180.♡.69.216

    와우 감사합니다!!! 드디어 탈퇴 할 수 있겠네요!!
  • 육일사

    육일사 Lv.1

    24.04.19 · 49.♡.160.66

    감사합니다 시도해 볼께요!
  • 유죄

    유죄 Lv.1

    24.04.19 · 49.♡.128.193

    역시 능력자는 많아요 ㅎㅎㅎ
  • 머리에는뿔

    머리에는뿔 Lv.1

    24.04.19 · 106.♡.36.66

    우와 콘솔 스크립트 매우 빠르네요? 감사합니다!!
  • SEAN

    SEAN Lv.1

    24.04.19 · 210.♡.247.160

    이게 무슨 소린지 모르겠는 문과 출신.. ㅜㅜ
  • 엔뜨

    엔뜨 Lv.1 → SEAN

    24.04.19 · 125.♡.47.14

    그 브라우저에 사파리의 경우 ’요소 보기‘
    크롬의 경우 개발자 도구 같은 개발자를 위한 모드가 다 있는데요. 거기에 콘솔이라는 탭이있어요.
    거기에 본문에 있는 코드를 붙여넣기 하시면
    창을 닫지 않는한 빠른 속도로 작업될거에요!
    저도 문과 출신입니다 반가워용 ㅋㅋ
    https://m.blog.naver.com/jsk6824/222109539509
    요 링크 참고해보세요!
  • SEAN

    SEAN Lv.1 → 엔뜨

    24.04.19 · 210.♡.247.160

    역시 문과라고 다 같은 문과가 아니었어.. ㅜㅜ

    감사합니다!!!
  • 엔뜨

    엔뜨 Lv.1 → SEAN

    24.04.19 · 125.♡.47.14

    allow pasting 을 먼저 넣고 본문 내용을 진행하는 이유는 붙여넣기 허용한다는 거라고 보시면 됩니당.!
    그럼 소중한 시간 아끼세요! {emo:onion-002.gif:50}
  • ASTERISK

    ASTERISK Lv.1

    24.04.19 · 221.♡.211.119

    일단 와드 박습니다.
  • 사이다s

    사이다s Lv.1

    24.04.19 · 121.♡.208.129

    오 짱입니다.

댓글을 작성하려면 이 필요합니다.