지난 글에서는 뭐가 문제인지, 어떻게 할 구상인지에 대해 글을 써봤고, 이번에는 본격적으로 AI 에게 개발을 시켜볼 차례이다.

# ChatGPT (GPT-4o)

 ChatGPT 는 현재 상황을 인식시키고 답을 내놓으라고 할 때 참 착하게 동작해준다. GPT-4o 모델로 image 를 포함한 file 을 upload 하여 일을시킬 수 있어 좀더 여러가지 일을 시킬 수도 있어 좋다.(무료 플랜에서도 제한적으로 사용 가능하다)

 ChatGPT 에게 시킬 일 : ChatGPT 에게는 HTML 코드의 일부를 Image 로 캡춰해서 분석하게 한 후 총 남은 댓글의 개수를 가져오는 Javascript 코드를 만들어 내라고 시켰다. (아래 캡쳐의 122,364 라는 숫자를 가져오고 싶은 것이다)

무한정 일을 반복시킬 수는 없으므로 처음에는 남은 댓글 수가 0이 될 때 까지 돌려버리려 했다. (나중에는 정말 진심으로 감사드릴 댓글까지 지워지면 안되겠다 싶어 좀더 시간을 들여 수정 했지만..^^)

위 처럼 Chrome 의 개발자도구에 있는 HTML 코드 일부를 Image 로 캡춰해서 필요한 부분을 가져오는 JS 를 만들어달라고 하니 아래 처럼 코드를 생성해준다

나는 Javascript 를 Chrome 개발자도구의 console 에서 직접 실행시킬것이기 때문에 "DOMContentLoaded" 이벤트 Listener 를 구현할 필요는 없고, 그 안의 내용만 있으면 된다.

요즘은 Client 쪽 JS 를 개발할 일이 없기때문에 왠만한 ECMAScript 표준함수 들에 대해서는 다 까먹고 있었는데 궂이 찾아볼 필요 없이 잘 코드를 뽑아준다. HTML 에는 숫자에 자릿수 구분자 "," 가 들어가 있는데, 이걸 replace 해주어 int 로 변환해주는 코드도 친절하게 넣어준다.

 

# 좀더 일 주기

잘 해주었다 GPT-4, 그러나 그리 호락한 주인이 아니어서 일을 좀 더 하라고 지시하고 싶은 부분이 있다.

HTML 구조 상 ChatGPT 가 만들어준 코드 처럼 ".txt_count" 클래스로만 가져오면 혹시나 다른데에서도 저 클래스를 쓰는 경우가 생긴다면 잘못된 값을 가져올 수 있으니 (뭐 현재 페이지 코드를 보면 그렇지는 않았지만~), 좀더 querySelector() 의 query 를 specific 하게 쓰거나 다른 코드를 덧붙였으면 하는 주문을 해봤다

💬 const txtCountElement = document.querySelector('.txt_count');
      여기서 .txt_count 클래스는 다른곳에도 사용될 수 있으니 조금 변경해줘

🤖

다른 곳에서도 .txt_count 클래스가 사용될 수 있기 때문에, 특정 부모 요소 내에서 해당 요소를 선택하도록 수정하겠습니다. tit_cont 클래스를 가진 요소 내에서 .txt_count 클래스를 선택하도록 변경하겠습니다.

<!DOCTYPE html>
....
중략
...

    <script>
        // JavaScript to get the number and convert it
        document.addEventListener('DOMContentLoaded', (event) => {
            // Select the h3 element containing the specific txt_count
            const titContElement = document.querySelector('.tit_cont');

            // Select the span element containing the number within the h3 element
            const txtCountElement = titContElement.querySelector('.txt_count');

            // Get the text content from the span element
            const txtCount = txtCountElement.textContent;

            // Remove commas from the string and convert it to a number
            const number = parseInt(txtCount.replace(/,/g, ''), 10);

            // Log the number to the console
            console.log(number);
        });
    </script>
</body>
</html>

이 코드에서는 .tit_cont 클래스를 가진 부모 요소 내에서 .txt_count 클래스를 가진 자식 요소를 선택합니다. 이를 통해 해당 클래스가 다른 곳에 사용되더라도 정확한 요소를 선택할 수 있습니다.


그래서 일단 전체 댓글의 개수를 가져오는 function 하나는 아래와 같이 getCurCount() 라는 이름으로 만들었다

// ChatGPT 가 만든, 현재 댓글 수를 가져오는 함수
function getCurCount() {
    // Select the h3 element containing the specific txt_count
    const titContElement = document.querySelector('.tit_cont');

    // Select the span element containing the number within the h3 element
    const txtCountElement = titContElement.querySelector('.txt_count');

    // Get the text content from the span element
    const txtCount = txtCountElement.textContent;

    // Remove commas from the string and convert it to a number
    return parseInt(txtCount.replace(/,/g, ''), 10);
}

 

이렇게 ChatGPT 에게 HTML 의 Capture Image 를 주고 코드를 만들게 하고 수정까지 요청하여 간단하지만 코드를 하나 만들었으니, 다음에는 CoPilot 을 옆에 앉혀두고 나머지 기능들을 개발 해 나아가자 (다음글 계속)

 

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

# 댓글 테러 발견

 열정이 식었다기 보다는 다른 것들로 인해 방치되고 있던 나의 티스토리 블로그, 어쩌다 들어와보다 보니 게시물에 댓글들이 엄청 달려있다~! "옷? 사람들이 갑자기 내 블로그에 급 관심 상승할만하게 있었나!?!?!?"

 싶었으나.. 역시나 그럴리는 없고 왠놈이 내 블로그 댓글이 로그인 안한 사람들도 댓글 달 수 있다는 사실을 알고 티스토리를 해킹해보려 시도하다가 잘 안되었는지 (XSS, SQL Injection 을 하려던 흔적이 많이 보였다) 약 12만개 정도의 댓글을 도배 해놨다.

처음에는 원래 티스토리에 있는 기능인 "스팸차단" 기능을 사용하여 작성자와 IP 로 차단을 하면 자동으로 기존 그들이 작성한 댓글들도 삭제된다는 말을 믿고 기능을 실행 해봤다

그러나 이게 뭐지.. 화면에는 아무 반응이 없고 댓글들이 사라지지도 않는다. 왜그런지 크롬 개발자도구 (Option + Cmd + I) 눌러보니 그래도 대형 블로그 플랫폼인 Tistory 에서 서버 에러가 나고 있다

처음에는 임시적인 문제인가 싶었으나 사실 몇달 전에도 이 기능을 실행해봤으나 지금도 결과가 똑같았다

500 에러 나고있는 차단기능

위 처럼 차단 요청에 대해 500 에러가 나고있으며 아마도 오랜동안 쭈욱 저 기능은 안돌고 있는것 같다. 티스토리에 문의를 해봤으나 답변도 없고 답답함의 연속이라 티스토리를 원망하기 시작한다.

혹시나 하여 복수개가 아닌 개별로 선택하고 스팸차단을 실행해봤지만 결과는 아래와 동일하다

 

# 되는건 뭔가

 다행인지 불행인지 차단기능은 안되지만 댓글을 삭제하는 기능은 가능했다. 한땀 한땀 눌러서가 아니라 1 페이지에 15개의 댓글이 뜨는데 그 15개를 전체선택 해서 삭제하는 것(휴지통으로 보내기)은 가능했다.

1 페이지 내의 댓글 전체선택 (15개) 하는 경우,

- 총 122,363 개 댓글이 있으니 8,157 개의 페이지가 있단 얘기이고
- 전체선택 체크박스 클릭 + 변경 버튼 클릭 + 휴지통으로 이동 버튼 클릭 = 3 클릭
- 8,157 x 3 click = 24,471

즉, 24,471번의 클릭을 하면 지울 수 있는 일이다~! 그런데..

- 클릭 1회 당 1초
- 삭제 후 로딩 2초
- 로 계산하면.. 24,471 초 + 8,157페이지 * 2초 로딩 = 40,785 초 = 679.75분 = 11.32 시간 = 약 11시간 20분

즉, 11시간 20분 동안 쉬지도 못하고 화장실도 못가고 클릭을 하고 있어야 한다는 결론이 나왔고, 혹시나 병원비가 나올지도 모르겠다는 생각이 들어서 기계를 시키기로 마음을 먹었다.

 

# 어떻게 할건가

일단 POSTMAN 을 켰고, 티스토리 -> 카카오의 OAuth2 인증을 거쳐 Token 을 받고 인증을 하고 들어가야 하는데.. 이걸 세팅하고 테스트 하고 개발해서 돌리는 시간도 한 11시간은 걸릴것 같다는 판단이 들었고, 최장 2시간 이내에 못끝낼거면 하지 말자는 각오로 20분 정도 진행 하다가 이건 아니다 싶어 방향을 전환했다.

Chrome 의 개발자도구로 돌아가서 페이지를 분석해보니 아래 처럼 현재 페이지의 전체 댓글을 선택하는 체크박스와 변경버튼 눌렀을 때 펼쳐지는 메뉴에서 휴지통으로 이동 버튼의 위치를 찾을 수 있었다.

이제 나의 계획은 이미 OAuth2 인증 다 타고 들어간 저 Session 에서 개발자도구 Console 에서 DOM 으로 올라온 페이지를 보고 Javascript 를 실행시켜 나 대신 클릭을 시키는 것~! (이건 1차 계획이었고, 너무 느려서 방법을 바꿨다.. 이건 추가설명 예정)

자 이제 구상을 했으니 AI 들에게 일감을 던져볼 차례이다 (다음 글에서..)

 

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,