728x90

1. 개발배경


아이돌 팬카페에서 일정시간에 등업을 신청할경우 선착순으로 어떤 혜택을 받는거같다(정확하진않음)

그래서 어떤분이 매크로 제작외주를 맡기셨고 수강신청매크로와 비슷한 이론인거같아 제작하게 되었습니다.

 

2. Module


 
 
 
from PyQt5.QtGui import QIcon
import requests
import threading
from PyQt5.QtWidgets import *
from PyQt5 import uic
 
 
 
3. 이론

본 포스팅은 selenium을 이용하여 웹드라이버를 통해 웹을 실행하여 글을 쓰는게 아닌

다음서버로 패킷을 날려 내가 원하는시간에 누구보다 빠르게 글을 쓰는것이 목표입니다.

우선 다음카페에서 글을 쓸때 어떤 URL로 데이터가 송수신 되는지

헤더값은 어떤지

payload(json)값은 어떤지

쿠키값은 어떤식으로 통신하는지 규칙성을 이해해야 합니다. 

이러한 매크로같은경우 패킷분석이 99%이며 코드는 requests.post() 한줄이면 끝납니다.

 

본 포스팅은 오마이걸 팬카페에서 이용자가 원하는시간에 등업신청 패킷을 날리는 매크로 입니다.

등업신청을 할때 요청 URL은

 

쿠키 = {
    'HM_CU' : '5EOWjxEKReG'	,
    'HTS' : 'a8F1CyTfhKDrZ1HEcUNmdQ00'	, #변동값
    'LSID' : '4ozpxSyH8WSPySdNOon1RVWOoHIyJcz_V7bIQxR14PC5g05T4lmugY--B3xgBESvMi346UeveMHApLb6OGyY-4u5BKTvVHrLTQpRqvO5uys2XzS-Q',	#변동값
    'PROF' : '0603012032024076024152UiQPJk7X-6w0mlxoempuua_CKZSggqOGDvo1-CjkaIWcKuZP3z7wEl2W4..NYhR74w00LYYSA9A1_cGNLCyhCzrwOjTi9JCLCPIzyUJ3iNS289Pf8dq.GqUK-I8P-bSfpU2ZfabaifH47uU0fIauQlo8OTLLnHHY.bHDTw00Voisr2G29DEIx7wRa8yZRJAMSaOmydBtoy7RolpDnJ7Cye39yr6LtBtp9ZQ-fDSc34JWkRbso7m6DCIqZGU1g8rlf9KqRak-n_-41UM27eYp-TevH7dyy2XAwBEX56l7PFWutf.kMbC_SE.gc8GDVQ00'	,#이건가 
    'TS' : '1669752762',
}

#HTS , LSID는 변동값 1~2시간마다 값이 갱신되는것같다. 
#쿠키값은 많지만 필수로 요구하는 쿠키는 이정도인거 같다. 
#이렇게 5개의 쿠키값은 다음서버와 통신할때 필수로 요구하는 쿠키값인거같다

 

request_payload=[
                {'questionId': '16436', 'answer': input1},
                {'questionId' : '16437', 'answer': input2},
                {'questionId': '16438', 'answer': input3},
                {'questionId': '16439', 'answer': input4},
                {'questionId': '16440', 'answer': input5},
                {'questionId': '16441', 'answer': input6},
                {'questionId': '16442', 'answer': input7}
                ]
                
#request_payload는 다음카페 등업신청을 할때 대답해야 하는 값들이다. input1~7은 GUI프로그램을 통해
# 값을 입력받았습니다.

 

 

전체코드


from re import L
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
import ccxt
import firebase_admin
from PyQt5.QtGui import QIcon
import requests
import threading

from datetime import datetime

TT = 0
쿠키 = {
    'HM_CU' : '5EOWjxEKReG'	,
    'HTS' : 'a8F1CyTfhKDrZ1HEcUNmdQ00'	, #변동값
    'LSID' : '4ozpxSyH8WSPySdNOon1RVWOoHIyJcz_V7bIQxR14PC5g05T4lmugY--B3xgBESvMi346UeveMHApLb6OGyY-4u5BKTvVHrLTQpRqvO5uys2XzS-Q',	#변동값
    'PROF' : '0603012032024076024152UiQPJk7X-6w0mlxoempuua_CKZSggqOGDvo1-CjkaIWcKuZP3z7wEl2W4..NYhR74w00LYYSA9A1_cGNLCyhCzrwOjTi9JCLCPIzyUJ3iNS289Pf8dq.GqUK-I8P-bSfpU2ZfabaifH47uU0fIauQlo8OTLLnHHY.bHDTw00Voisr2G29DEIx7wRa8yZRJAMSaOmydBtoy7RolpDnJ7Cye39yr6LtBtp9ZQ-fDSc34JWkRbso7m6DCIqZGU1g8rlf9KqRak-n_-41UM27eYp-TevH7dyy2XAwBEX56l7PFWutf.kMbC_SE.gc8GDVQ00'	,#이건가 
    'TS' : '1669752762',
}

url = ''



form_class = uic.loadUiType("untitled.ui")[0]
    


class WindowClass(QMainWindow, form_class) :
    
    global TT

    def __init__(self) :
        super().__init__()
        global 쿠키   
        global TT     
        self.setupUi(self)


        def test_button():
        
            input1 = str(self.textEdit.toPlainText())
            input2 = str(self.textEdit_2.toPlainText())
            input3 = str(self.textEdit_3.toPlainText())
            input4 = str(self.textEdit_4.toPlainText())
            input5 = str(self.textEdit_5.toPlainText())
            input6 = str(self.textEdit_6.toPlainText())
            input7 = str(self.textEdit_7.toPlainText())
            input8 = str(self.textEdit_8.toPlainText())
            
            사이트 = str(self.comboBox.currentText())
            시간 = str(self.textEdit_11.toPlainText())
            if(사이트 == '오마이걸'):
                request_payload=[
                {'questionId': '16436', 'answer': input1},
                {'questionId' : '16437', 'answer': input2},
                {'questionId': '16438', 'answer': input3},
                {'questionId': '16439', 'answer': input4},
                {'questionId': '16440', 'answer': input5},
                {'questionId': '16441', 'answer': input6},
                {'questionId': '16442', 'answer': input7}
                ]

                web_url = 'https://cafe.daum.net/_c21_/api/apply/article/1VTSi/sgo6' #오마이걸 
                dt = datetime.now()

                print('정상작동중')
                #insert(index, element) 
                
                
                time_str = str(dt.hour)+str(dt.minute)+str(dt.second)+str(dt.microsecond)
                
                
                if(len(str(dt.hour)) == 1):
                    time_str = '0'+str(dt.hour)+str(dt.minute)+str(dt.second)+str(dt.microsecond)
                    if(len(str(dt.minute)) == 1):
                        time_str ='0'+str(dt.hour)+'0'+str(dt.minute)+str(dt.second)+str(dt.microsecond)
                        
                    if(len(str(dt.second)) == 1):
                        time_str = '0'+str(dt.hour)+str(dt.minute)+'0'+str(dt.second)+str(dt.microsecond)
                        if(len(str(dt.minute)) == 1):
                            time_str = '0'+str(dt.hour)+'0'+str(dt.minute)+'0'+str(dt.second)+str(dt.microsecond)
                time_str = time_str[0:9]
                시간 = 시간[0:9]

                print('현재 시간  :  '  +time_str)

                print('신청할 시간 : ' + 시간)
                탈출 = 0 
                while(True):
                    dt = datetime.now()

                    time_str = str(dt.hour)+str(dt.minute)+str(dt.second)+str(dt.microsecond)
                
                
                    if(len(str(dt.hour)) == 1):
                        time_str = '0'+str(dt.hour)+str(dt.minute)+str(dt.second)+str(dt.microsecond)
                        if(len(str(dt.minute)) == 1):
                            time_str ='0'+str(dt.hour)+'0'+str(dt.minute)+str(dt.second)+str(dt.microsecond)
                            
                        if(len(str(dt.second)) == 1):
                            time_str = '0'+str(dt.hour)+str(dt.minute)+'0'+str(dt.second)+str(dt.microsecond)
                            if(len(str(dt.minute)) == 1):
                                time_str = '0'+str(dt.hour)+'0'+str(dt.minute)+'0'+str(dt.second)+str(dt.microsecond)
                    time_str = time_str[0:9]
                    
                    if(탈출 == 1):
                        break
                    if(탈출 == 0):
                        print('현재 시간  :  '  +time_str)

                        print('신청할 시간 : ' + 시간)
                        if(int(time_str) > int(시간)):
                            page = requests.post(url=web_url,  json=request_payload,  cookies=쿠키)
                            print(page)
                            print(page.text)
                            탈출 = 1 
                            break
                    
                
                

        self.pushButton_3.clicked.connect(test_button) #로그인 버튼 이벤트



            
if __name__ == "__main__" :
    #QApplication : 프로그램을 실행시켜주는 클래스
    app = QApplication(sys.argv)
    
    #WindowClass의 인스턴스 생성
    myWindow = WindowClass() 

    #프로그램 화면을 보여주는 코드
    myWindow.show()
    #프로그램을 이벤트루프로 진입시키는(프로그램을 작동시키는) 코드
    app.exec_()

 

 

 

4. 작동영상


 

 

bandicam 2022-11-30 15-24-16-828.mp4
9.04MB

728x90

+ Recent posts