파이썬 자동 클릭 매크로 만들기 맛보기, PyAutoGUI [주식 및 블로그 자동 접속/클릭 등]
본문 바로가기

주식 자동매매 강의/중급반(시황 및 차트 구현)

파이썬 자동 클릭 매크로 만들기 맛보기, PyAutoGUI [주식 및 블로그 자동 접속/클릭 등]

반응형

 주식이든 블로그든 자동 클릭이 필요할 때가 있습니다. 깊게 들어가면 한없이 깊게 들어가니 간단하게 파이썬을 이용해 자동 클릭 메크로 제작법 말씀드리겠습니다. 그 어디보다 자세히 설명되어 있으니 누구나 제작 가능할 것입니다.

 

목표 : PyQt5와 PyAutoGUI 라이브러리를 사용하여 단순한 작업을 반복하는(광고클릭????) 매크로 프로그램을 만들 수 있습니다. 클릭할 위치(X, Y)와 클릭과 클릭 사이의 시간, 그리고 클릭 횟수를 입력하여 원하는 위치를 반복해서 클릭하는 프로그램을 만들어 보겠습니다.

 조금만 응용하면, 나의 구독자 님들에게 자동으로 들어가 안부인사 남기기(반복된 멘트 : 포스팅 잘 보고 갑니다 등). 반복되는 포스팅 자동으로 하기. 광고 작업하기 등 할 수 있겠죠. 응용은 개인의 몫입니다. 저 같은 경우는 폰 게임도 녹스로 실행 시키고 자동으로 작물 채취 등을 해서 항상 상위 랭커가 되었었죠. 단점은 이렇게 자동으로 하면 재미가 없어집니다..

반응형

1. PyAutoGUI는 무엇인가 :  파이썬으로 키보드 마우스를 자동 제어하고 업무 자동화

PyAutoGUI는 마우스/키보드 자동 제어를 위한 크로스 플랫폼 (cross-platform) 파이썬 모듈입니다. 

기능으로는 마우스/키보드 자동 조작이 가능하고 가장 중요한 게 자동으로 이미지 영역을 찾아서 이미지 영역의 가운데 위치를 얻은 다음 클릭이 가능하다는 것이죠. 이는 자동으로 주식 프로그램을 실행시킬 수도 있고 블로그의 특정 위치를 비 주기적으로 클릭도 할 수 있다는 뜻입니다.

 

우선 파이썬으로 가셔서 terminal에 아래 코드를 입력하세요.

pip install pyautogui

terminal 위치
terminal 위치

2. 원하는 위치 (x, y) 좌표 클릭 코딩

 (1) 관련 함수 가져오기 : 우리가 쉽게 코딩하기 위해서 누가 다 코딩해 놓은 기능을 가져다 쓰기 위해 import 함수를 사용합니다. 

 

관련 함수 가져오기
관련 함수 가져오기

 

 ◈ import sys : system specific parameter and functions를 가져오겠다는 의미입니다.

 - 파이썬 스크립트(메모장)를 관리하는 역할을 하고 있습니다. 지금 여러분들이 글을 적는 공간을 관리하는 것입니다. 조금 어렵게 말하면 파이썬에 인터프리터가 제공하는 변수와 함수를 제어한다는 것입니다.

 ◈ from PyQt5.Qwidgets import * : *의 의미는 PyQt5.Qwidgets이라는 폴더 안의 모든 함수를 가져오겠다는 것입니다.

  - 위젯이란 여러분들이 사용하는 프로그램의 클릭 버튼/표/진행 바 등을 제어하는 요소들을 통합적으로 부르는 말입니다. 이것을 가져와야 여러분들이 원하는 그래픽적인 기능을 수행할 수 있습니다.

 ◈ from PyQt5.QtCore import QTimer : 시간 관련 함수를 사용하기 위한 것입니다. 우리는 특정 시간에 클릭을 해야겠죠?

 ◈ import pyautogui : 마우스/키보드를 컨트롤 하기 위한 요소를 다 들고 오는 것입니다.

 

 

 (2)  마우스 클릭 코딩

마우스 클릭 코딩
마우스 클릭 코딩

 ◈ def __init__(self) : 우리가 만든 함수를 초기화합니다. 또한 super().__init__() 함수를 사용해 우리가 외부에서 가져오는(import) 부모 클래스 또는 함수도 초기화해 줍니다.

 ◈ self.x, self.y, self.dely, self.num_click = 0, 0, 0, 0 : x좌표, y좌표, 시간 지연, 클릭 회수를 전부 0으로 만들어 줍니다. 이때 x, y좌표가 (0.0)이면 여러분 모니터 화면 최 상단 좌측입니다.

 ◈ self.start_btn_click() : 자동 클릭 함수를 실행 합니다. 나중에 GUI와 연동해서 특정 버튼 클릭 시 자동클릭 함수를 실행하게 할 것입니다. 오늘 강의는 맛보기입니다.

 ◈ def start_btn_click(self) : 버튼 클릭 함수입니다.

  - self.timer = QTimer() : 타이머의 기능을 self.timer에 인스턴스화 합니다. 앞으로 self.timer는 QTimer()와 동급입니다.

  - self.x = 800 : 모니터의 x좌표입니다. 

  - self.y = 500 : 모니터의 y좌표입니다. 차 후에 본인이 원하는 위치의 모니터 x, y좌표를 읽어 들이는 부분을 강의해 드리겠습니다. 지금은 임의의 위치에 클릭해 봅니다.

  - self.delay : 초 단위라 보시면 되고 몇 초마다 한 번씩 클릭할 것이 정하는 곳입니다.

  - self.routine_number : 반복 횟수입니다. 3이면 3번이고 5번 5번입니다.

  - self.timer.start(self.dealy * 1000) : 타이머가 시작합니다. 위에서 지간 지연을 3초 하였으니 3초마다 한 번씩 작동하게 됩니다. 이때 1000을 곱하는 이유는 원래 QTimer의 단위는 0.001초입니다. 따라서 1000을 곱해야 1초가 되니 1000을 곱하여 초 단위로 만든 것입니다.

  - self.timer.timeout.connect(self.mouse_click) : 3초가 지나면 timeout이 되겠죠? 그때 바로 self.mouse_click() gkatnfmf 실행합니다.

 ◈  delf mouse_click(self): 마우스를 클릭하는 함수입니다.

  - pyautogui.click(self.x, self.y) : pyautogui의 클릭 함수를 사용하여 x, y좌표에 클릭하는 것입니다. 슬 제로 더블클릭/드래그 등의 다양한 기능이 있는데 그것은 다음 강의에서 살펴보시죠. 일단 아 이렇게 하면 클릭이 되는구나라는 의미만 아시면 될 것 가습니다.

  - self.num_click += 1 : 아까 self.num_click이 0으로 초기화했던 거 기억하시죠. 만약 3초가 끝나 def moue_click이 실행되면 0이 1이 되고 한 번 더 실행되면 1이 2가 되는 기능입니다.

 ◈  if self.num_click == self.rutime_number : 처음에 반복 회수를 self.routine_number에 3을 입력하였죠. 3초마다 마우스 클릭이 반복되다가 self.num_click이 3이 되는 순간 아래 코드를 실행합니다.

  - self.timer.stop() : timer가 멈추었으니 더 이상 이 코드는 동작하지 않습니다. 즉 3번 클릭 후 끝나는 것이죠

 

 (3)  앞으로 우리는 여러 가지 클래스나 함수들을 import 할 텐데 아래 코드를 입력하지 않으면 그냥 다 실행됩니다. 우리가 원할 때만 써야 될 것들이 그냥 실행되면? 일도 제대로 안되고 뒤죽박이게 됩니다. 이를 해결하기 위해 아래의 코드가 반드시 필요합니다.

메인 실행
메인 실행

 ◈ if __name__=='__main__':

  만약 이름이 main이라면 아래의 코드들을 직접 실행하겠다는 의미이다. 이때 main은 파이썬 고유 내장 함수인데 현재 여러분들이 보고 있는 스크립트(메모장)를 main이라 생각하고 그 메모장에 적혀 있는 것들만 사용하겠다는 의미입니다. 즉 위에서 설명하였듯이, import 한 다양한 함수들을 불필요하게 실행하지 않겠다는 의미와 동일합니다.

 ◈ app = QApplication(sys.argv)

  컴퓨터에게 무엇을 실행시켜야 하는지 알려주는 코드입니다. sys.argv는 현재 작업 중의 파이썬 스크립트의 절대 경로(주소)입니다. 이 주소를 QApplication이라는 객체가 실행하라고 하는 명령입니다.

 ◈ ex = MyApp()

  무엇을 실행해야 하는지 알려주는 코드입니다. 앞서 설명한 MyApp()이라는 코드를 실행하고 그 코드를 실행해라는 의미입니다.

 ◈ app.exec_()

  exec_() 함수는 프로그램이 종료되지 않게 무한반복시키는 함수입니다.

 

3. 결론 및 코드 공유

 오늘 강의는 기초 부분이지만 자동 클릭은 정말 다양한 곳에 활용될 수 있습니다. 응용하기에 따라 큰돈이 될 수 도 있습니다. 만약 블로그 같은 곳에 접속 후 클릭하려면 저번에 강의드린 크롤링 강의에서 이 코드만 집어넣으면 원하는 사이트에 접속 후 반복적으로 특정 아이콘을 클릭할 수 있습니다. 시간도 본인이 선택할 수 있습니다.

 코드는 아래와 같습니다.

 

import sys
from PyQt5.QtWidgets import *             # 위젯관련 함수 사용하기
from PyQt5.QtCore import QTimer           # 시간관련 함수 사용하기
import pyautogui                          # pyautogui 함수 사용하기


class MyApp(QWidget):

    def __init__(self):
        super().__init__()                # 부모 클래스 초기화


        self.x, self.y, self.delay, self.num_click = 0, 0, 0, 0     # x, y, 지연, 클릭 횟수 초기화

        self.start_btn_click()          # 자동클릭 하기

    def start_btn_click(self):
        self.timer = QTimer()          # self.timer에 Qtimer() 기능 인스턴스화
        self.x = 800                   # x축 좌표
        self.y = 500                   # y축 좌표
        self.delay = 3                 # 지연(초)
        self.rutine_number = 3         # 반복 횟수

        self.timer.start(self.delay * 1000)             # timer 시작, self.deay만큼 시간 지연 후 종료 그리고 다시 가동
        self.timer.timeout.connect(self.mouse_click)    # timer가 끝나면 self.mouse_click 명령 생성

    def mouse_click(self):
        pyautogui.click(self.x, self.y)                 # pyautogui의 click 함수 사용 위치는 x,y 좌표
        self.num_click += 1                             # timer가 다시 가동될 때 마다 1씩 증가


        if self.num_click == self.rutine_number:        # 클릭 횟수가 self.rutine_number와 동급을 때 멈춰라
            self.timer.stop()


if __name__ == '__main__':           # import된 것들을 실행시키지 않고 __main__에서 실행하는 것만 실행 시킨다.
                                     # 즉 import된 다른 함수의 코드를 이 화면에서 실행시키지 않겠다는 의미이다.

    app = QApplication(sys.argv)     # PyQt5로 실행할 파일명을 자동으로 설정, PyQt5에서 자동으로 프로그램 실행

    ex = MyApp()                     # ex에 MyApp()을 상속시킨다.

    sys.exit(app.exec_())
반응형

.link_tit