파이썬 백그라운드 매크로 - paisseon baeggeulaundeu maekeulo

컴퓨터 파이썬 매크로 백그라운드(?)로 가능한가요? (혹은 다른 언어/툴) 3

2021-01-02 00:58:14 218.♡.22.209

웹사이트 로그인해서 간단한 작업을 하는 매크로가 필요해서 오토핫키로 구현했는데 좀 부족하더라구요.

그래서 파이썬을 찾아보니 대략 구현이 가능할 것 같네요. (selenium, beautifulsoup 등)

그런데 혹시 화면을 띄우지 않고 백그라운드로(?) 매크로 작동이 가능할까요?

화면좌표나 이미지인식 등을 사용하지 않고 textbox/input/button 등 HTML 요소만 사용한다면 

백그라운드에서 매크로를 돌리고, 저는 그동안 다른 작업을 할 수 있지 않을까 해서요.

혹은 구글 클라우드 등에서 윈10으로 돌려도 제대로 돌아가는지 궁금합니다.

코딩에 대한 지식은 약간 있는데, 그외 부분은 잘 몰라서 질문드립니다.

댓글 • [3] 을 클릭하면 간단한 회원메모를 할 수 있습니다.

cherok cherok

IP 116.♡.116.84

21-01-02 2021-01-02 01:25:25

·

실제 브라우저 띄우지 않고도 '백그라운드'로 요청 보내고 응답 파싱해서 처리 가능합니다

e박사 e박사

IP 218.♡.22.209

21-01-02 2021-01-02 12:38:01 / 수정일: 2021-01-02 12:38:48

·

@cherok님 좀더 공부하다 보니 selenium에 headless 모드로 가능할 것 같은데 이게 말씀하신 부분이 맞을까요?

cherok cherok

IP 116.♡.116.84

21-01-03 2021-01-03 00:30:58

·

@e박사님 크게 두가지 방식으로 접근이 가능한데 첫번째는 언급하신 headless 모드로 동작하는것이고
두번째는 http request / response 구조에 대해서 좀더 분석을 해서 아예 browser 에 대한 의존성(화면 요소 클릭, 선택등) 을 배제하고 실제 필요한 http request 를 만들어서 요청할수도 있어요
예를 들면 select box 를 선택하고 '전송' 버튼을 누르는 행위를 서버와의 상호작용 관점에서 보면
https://xxx.abc.com/form/submit 이라는 주소로 select box 의 값과 그 외 필드 값을 보내는 행위로 볼수 있거든요(XHR 또는 form submit)
이런 관점에서 requests module 로 selenium 없이 요청 보내고 요청에 따른 응답 분석하고 다음 요청 보내고 하는식으로요... 말로 설명하려니 어렵긴 한데 어느정도 이해하시는지? 아니면 어느정도 수준으로 필요한지 답을 주시면 거기에 대해 다시 설명해드리든지 할께요 :)

GIF 파일 다운로드

0 0 0 0

GIF 파일을 다운로드 받으려면
화면에 표시된 4자리 번호를 입력해주세요.

토닥토닥 파이썬 - 파이썬 미니 프로젝트 01 장 머리말 섹션 01 머리말 강의 01 머리말 섹션 02 선수 과목 강의 01 토닥토닥 파이썬 - 파이썬 기초 (링크) 02 장 난이도 하 섹션 01 비만도 측정 강의 01 프로그램 소개 강의 02 BMI (Body Mass Index) 수치 출력 강의 03 비만 단계 출력 강의 04 키보드 입력받기 03 장 난이도 중 섹션 01 점심 메뉴 추천 강의 01 프로그램 소개 강의 02 메뉴 출력 강의 03 점심 메뉴 추천 섹션 02 로또 번호 생성 강의 01 프로그램 소개 강의 02 로또 번호 생성 04 장 난이도 상 섹션 01 음료 자판기 강의 01 프로그램 소개 강의 02 메뉴 출력 강의 03 메뉴 선택 강의 04 잔액이 부족합니다 강의 05 키보드 입력받기 자판기 05 장 부록 섹션 13 참고 자료 강의 01 참고 자료 섹션 99 정리요 01-1[집행검키우기] 자동 클릭하는 오토 매크로 만들기! 01-2 절대 않걸리는 모바일

I'm trying to make a macro program with python 3.7 on Windows10

I want to send keyboard/mouse inputs to any specific target window while the target window keep inactivated(minimized or background)

pyautogui seems to not be able to do that (If I miss something let me know plz)

pywinauto can send inputs to specific target window but it always make the target window activate.

Is there any way keeping target window inactivated????


import pywinauto

app = pywinauto.application.Application().connect(best_match='123 - Notepad', top_level_only=False, visible_only=False)

form = app.window(title_re='123 - Notepad')

for i in range(1, 10):
    form.type_keys("12e12e21e")

파이썬 백그라운드 매크로 - paisseon baeggeulaundeu maekeulo

1. 파이썬 매크로 기본 함수 배우기 - 메모장에 마음대로 낙서하기

파이썬 백그라운드 매크로 - paisseon baeggeulaundeu maekeulo
### intro.
## Date : 2020. 11. 26
## Editer : 성원경 선생님 / 경기기계공업고등학교

### 1. 파이썬 기본 매크로 함수 사용하기

import pyautogui
import time
from pyperclip import copy

# 마우스 위치 알아내기 반복문
while(0) :
    print(pyautogui.position())
    time.sleep(0.1)

# 마우스 움직이기
pyautogui.moveTo(20, 1058, 1)
pyautogui.click()
time.sleep(0.5)
pyautogui.typewrite(['space'])
time.sleep(0.5)
pyautogui.typewrite(['a', 'p', 'a','h'])
pyautogui.typewrite(['enter'])
time.sleep(0.5)
pyautogui.typewrite('Hello Python Macro~!')
pyautogui.typewrite(['enter'])
copy('나는 원킹이야')

pyautogui.hotkey("ctrl", 'v')

2. 파이썬 매크로 활용 예제  - 매크로로 즐기는 두더지 게임~!

파이썬 백그라운드 매크로 - paisseon baeggeulaundeu maekeulo

두더지 게임 다운로드 받아오기.

[꿀멘토]두더지게임

초등저학년부터 성인까지 마우스 연습에 좋아요!

edcoach.tistory.com

파이썬 백그라운드 매크로 - paisseon baeggeulaundeu maekeulo
### intro.
## Date : 2020. 11. 26
## Editer : 성원경 선생님 / 경기기계공업고등학교

### 2. 두더지 게임 메크로 돌리기

import pyautogui
from datetime import datetime
from datetime import timedelta

macro = True
start_time = datetime.now()

while(macro) :
    if datetime.now() - start_time > timedelta(seconds=18) :
        macro = False

    dudu = pyautogui.locateCenterOnScreen('dudu.png')
    print(dudu)
    pyautogui.click(dudu)

    print('두더지 게임 매크로를 종료합니다.')

3. 파이썬 매크로 활용 예제  - 알람시간에 맞춰 유튜브 매크로 재생하기

파이썬 백그라운드 매크로 - paisseon baeggeulaundeu maekeulo

디지털 시계 원본 소스 코드

oceancoding.blogspot.com/2019/04/blog-post.html

파이썬 예제 (디지털 시계)

코딩교육을 전문으로 하는 부산 강서구 명지동에 위치한 학원입니다.

oceancoding.blogspot.com

파이썬 백그라운드 매크로 - paisseon baeggeulaundeu maekeulo
### intro.
## Date : 2020. 11. 26
## Editer : 성원경 선생님 / 경기기계공업고등학교

### 3. 유튜브 매크로 알람 시계

### 디지털 시계 코드

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from threading import Timer
import time
import pyautogui

QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)

macro = True

class CWidget(QWidget):

    def __init__(self):
        super().__init__()
        self.year = QLCDNumber(self)
        self.month = QLCDNumber(self)
        self.day = QLCDNumber(self)
        self.hour = QLCDNumber(self)
        self.min = QLCDNumber(self)
        self.sec = QLCDNumber(self)


        # LCD 글자색 변경
        pal = QPalette()
        pal.setColor(QPalette.WindowText, QColor(255,0,0))
        self.sec.setPalette(pal)

        # # LCD 배경색 변경
        # pal = QPalette()
        # pal.setColor(QPalette.Background, QColor(255,0,0))
        # self.min.setPalette(pal)
        # self.min.setAutoFillBackground(True)

        self.initUI()

    def initUI(self):
        hbox1 = QHBoxLayout()
        hbox1.addWidget(self.year)
        hbox1.addWidget(self.month)
        hbox1.addWidget(self.day)

        hbox2 = QHBoxLayout()
        hbox2.addWidget(self.hour)
        hbox2.addWidget(self.min)
        hbox2.addWidget(self.sec)


        vbox = QVBoxLayout()
        vbox.addLayout(hbox1)
        vbox.addLayout(hbox2)

        self.setLayout(vbox)

        self.setWindowTitle('원킹의 유튜브 알람 시계')
        self.setGeometry(200, 200, 400, 200)

        self.showtime()

    def showtime(self):
        global macro
        # 1970년 1월 1일 0시 0분 0초 부터 현재까지 경과시간 (초단위)
        t = time.time()
        # 한국 시간 얻기
        kor = time.localtime(t)
        # LCD 표시
        self.year.display(kor.tm_year)
        self.month.display(kor.tm_mon)
        self.day.display(kor.tm_mday)
        self.hour.display(kor.tm_hour)
        self.min.display(kor.tm_min)
        self.sec.display(kor.tm_sec)

        # 특정 시간에 매크로 시작
        if kor.tm_hour == 14 and kor.tm_min == 25:
            if macro == True :
                pyautogui.typewrite(["WIN"])
                time.sleep(0.5)
                pyautogui.typewrite('chrome')
                time.sleep(0.5)
                pyautogui.typewrite(['enter'])
                time.sleep(0.5)
                #pyautogui.typewrite("https://youtu.be/3iM_06QeZi8")
                pyperclip.copy("https://youtu.be/3iM_06QeZi8")
                pyautogui.hotkey("ctrl", "V")
                time.sleep(0.5)
                pyautogui.typewrite(["enter"])
                time.sleep(0.5)
                pyautogui.typewrite(["F11"])
                time.sleep(0.5)
                pyautogui.typewrite(["f"])

                macro = False

        # 자정에 매크로 초기화
        if kor.tm_hour == 0 and kor.tm_min == 0 and kor.tm_hour == 0 and kor.tm_sec == 0 :
            macro = True


        # 타이머 설정  (1초마다, 콜백함수)
        timer = Timer(1, self.showtime)
        timer.start()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = CWidget()
    w.show()
    sys.exit(app.exec_())