본문 바로가기
Python

[파이썬/셀레니움] 인스타그램 봇 만들기 - 5일차 : Pyqt GUI, 패키징

by LasBe 2021. 4. 13.
반응형

[개발 일지]

2021.04.06 - [Language/Python] - [파이썬/셀레니움] 인스타그램 봇 만들기 - 1일차 : 셀레니움 설치 및 기초

2021.04.10 - [Language/Python] - [파이썬/셀레니움] 인스타그램 봇 만들기 - 2일차 : 알고리즘 구체화

2021.04.10 - [Language/Python] - [파이썬/셀레니움] 인스타그램 봇 만들기 - 3일차 : 코드 개선

2021.04.11 - [Language/Python] - [파이썬/셀레니움] 인스타그램 봇 만들기 - 4일차 : 알고리즘 개선

2021.04.13 - [Language/Python] - [파이썬/셀레니움] 인스타그램 봇 만들기 - 5일차 : Pyqt GUI, 패키징

[중요 기능]

2022.01.05 - [Language/Python] - [파이썬/셀레니움] 인스타그램 봇 만들기 - PyQT 리스트 추가, 삭제

 

 

 

기능 완성


드디어 완성!

 

파이썬에 대한 기초도, 셀레니움과 PyQT에 대한 기초도 하나 없던 내가 밤을 꼬박 새 가며 완성시켰다.

 

 

GUI - PyQT 연동


막연하게 PyQT로 GUI를 구현하고만 싶었지 아무것도 몰랐지만

예전에 C#으로 윈폼을 만져봤던 경험이 있어 사소한 기초정도는 깔고 갔다.

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import uic
from PyQt5 import QtCore
import sys
import time
import random

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

qt디자이너와 vs code를 연동시켜 작업했다.

 

저번에 깔끔하게 모두 함수화 시켜서 코드를 이쁘게 만들었는데

이유 모르는 에러가 계속해서 터져나오는 바람에 원복시켰다.

 

 

 

휴식


이번에 가장 애먹었던 부분은 time.sleep()를 사용하면 GUI가 멈춰버린다는 점이었다.

 

    def sleep(self, x):
        loop = QEventLoop()
        x = int(x*2000)
        QTimer.singleShot(x, loop.quit)
        loop.exec_()

어떻게든 방법을 찾으려고 돌아다니며 코드를 발견하고 따라해보는데 계속 실패해서 결국 성공할 때까지 시도했다.

 

 

 

TextEdit에 정보 띄우기


TextEdit에서도 많은 시간을 잡아먹었는데

각종 정보를 출력하려고

self.textbox.append('*** 성공 : ', total - noyangsim,' ㅣ 실패 : ', noyangsim, ' ㅣ ', total, ' 회 완료 ***')

저번과 똑같은 방식으로 시도하니 계속 실패했다.

 

append()에는 str만 들어가야 하는데 int값을 넣어주니 맛탱이가 가버리는 것이다.

t = str(total)
n = str(noyangsim)
y = str(total - noyangsim)
self.textbox.append('성공 : ', y ,  ' ㅣ 실패 : ', n , ' ㅣ total : ', t))

대충 이런식으로 만들어줘도 실패하길래 문자열 기초를 찾아보니

문자열을 합칠 땐 자바처럼 "+"를 사용해야 한다고 한다.

    def qwer(self, total, noyangsim):
        t = str(total)
        n = str(noyangsim)
        y = str(total - noyangsim)
        a = ('성공 : '+ y +  ' ㅣ 실패 : '+ n + ' ㅣ total : '+ t) 
        a = str(a)
        print(a)
        self.textbox.append(a)

최종적으론 무식하게 다 때려박고 되나 안 되나 두고 보자는 심정으로 해봤는데 성공했다.

좀 수정해야 하는데 너무 지쳐서 그냥 내버려두려고 한다.

전체적으로 버튼과 기능들을 연결해주었다.

 

 

패키징


pip install pyinstaller

실행파일로 만들어주기 위해 CMD로 pyinstaller를 설치한다.

 

pyinstaller --icon=아이콘명.ico -F -w 파일명.py

--icon을 이용하여 실행파일에 아이콘을 입혀주고

-F -w 를 이용해 모든 파일을 실행파일로 합쳐준 후 실행 시 명령 창이 뜨지 않게 해 주었다.

 

그 후 ui, icon, 크롬 드라이버를 같은 폴더에 옮겨 완성

 

(아이콘은 숨김 처리)

처음에 아이콘이 적용이 안돼서 헤매었는데 새로고침 해주니 적용이 된다.

 

 

 

마무리


생각한 알고리즘대로 정말 잘된다.

 

근데 테스트한다고 과도하게 돌리니 본인 인증이 떠서 또 벤먹은건가 싶었는데
인증 후 활동은 다시 가능해서 벤 회피는 거의 완벽해진 거 같다.

 

머리 쥐어뜯으며 만들어봤는데 결과물이 생각한 만큼 잘 나와서 뿌듯하다.

맨땅에 헤딩하며 만들다 보니 기초부터 머리에 각인이 된다.

 

다음엔 DB 쪽으로 연결하는 프로그램을 만들어봐야겠다.

 


[수정할 부분]

 

폼 객체들 예외처리

 

보이는 정보 가독성 높이기

 

정상적으로 중단되도록 만들기

 

더보기

파이썬, 셀레니움, python, selenium, 인스타그램, 봇, 인스타그램 자동화, 인스타 봇, 인스타 자동화, 인스타 자동화 프로그램 만들기, 인스타 봇 만들기, 파이썬 gui, pyqt gui, 인스타그램 차단, 인스타 밴, 인스타 차단, 파이썬 패키징, 파이썬 exe

반응형

댓글


오픈 채팅