반응형

기본 출처 

> Project 10 : 오토 마우스를 활용한 웹페이지 자동화 @ 파이썬과 40개의 작품들

 

- 키보드와 마우스를 컨트롤 할 수 있는 라이브러리 (pyautogui) 활용

- 한글 입력을 위해 클립보드 라이브러리 (pyperclip) 활용

 

작업 순서

1. 현재 마우스의 위치 알아내기 - 추후 클릭할 장소 검색에 사용

2. 네이버에서 지역날씨 검색하기

3. 검색된 날씨 화면 저장하기

4. 웹브라우저에서 네이버 들어가서 여러 지역의 날씨 검색 후 저장하기

5. 원하는 지역 입력 받아 날씨 검색 후 저장하기 

 

1. 현재 마우스의 위치 알아내기

 - pyautogui.position() 사용

import pyautogui
import time

while True:
    print(pyautogui.position())
    time.sleep(1.0)

결과

 - 1초마다 마우스의 위치 출력

 - 마우스를 움직이면 값이 바뀜

Point(x=-185, y=1471)
Point(x=569, y=1080)
Point(x=429, y=1080)
Point(x=1520, y=689)
Point(x=1380, y=592)
Point(x=1040, y=735)
Point(x=1044, y=706)
Point(x=925, y=668)
Point(x=925, y=668)
Point(x=915, y=1068)
Point(x=-74, y=1439)
Point(x=-85, y=1426)
Point(x=-91, y=1420)
Point(x=38, y=1543)
Point(x=70, y=1575)
Point(x=70, y=1575)

 

2. 네이버에서 지역 날씨 검색

3. 캡쳐 후 저장까지

 

 - 파이썬 오른쪽에 네이버를 띄워 놓는다.

import pyautogui
import time
import pyperclip

pyautogui.moveTo(1274, 245)		# 네이버 검색창으로 이동
pyautogui.click()		# 마우스 클릭
time.sleep(0.5)		# 잠시 대기

pyperclip.copy('제천날씨')		# 클립보드에 '제천날씨' 저장 : 한글입력이 안되므로 클립보드 활용
pyautogui.hotkey('ctrl', 'v')		# 핫키로 붙여넣기
time.sleep(0.5)

pyautogui.write(['enter'])		# 엔터키 입력
time.sleep(1)

startX = 1009		# 캡쳐 위치 (좌상단, 우하단)
startY = 357
endX = 1661
endY = 928

# 스크린샷 (저장파일, 시작 위치, 캡쳐 범위)
pyautogui.screenshot(r'기초프로그램\10_automouse\제천날씨.png', region =(startX, startY, endX-startX, endY-startY))

 

 

4. 웹브라우저에서 네이버 들어가서 여러 지역의 날씨 검색 후 저장하기

 

- 지역 이름들을 어레이로 만든다.

- 네이버 검색 전용창으로 들어가서 지역 검색 후 캡쳐

- 다시 검색창 지우고 다음 지역 검색 후 캡쳐

import py
import pyautogui
import time
import pyperclip

# 주소창 위치
addrX = 1129
addrY = 66

# 날씨검색 창 위치
serX = 1064
serY = 152

# 캡쳐 위치
startX = 992
startY = 251
endX = 1661
endY = 928

# 원하는 지역
regions = ['서울', '제천', '횡성', '인천', '제주', '강원도']

# 크롬 주소창으로 이동
pyautogui.moveTo(addrX, addrY)
time.sleep(0.2)
pyautogui.click()

# 전체선택 후 지우기
pyautogui.hotkey('ctrl'+'a')
time.sleep(0.2)
pyautogui.write(['delete'])
time.sleep(0.2)

# 네이버 입력
pyautogui.write('naver.com', interval = 0.05)
pyautogui.write(['enter'])
time.sleep(1)

# 네이버 검색 전용창 이동
pyautogui.click(1796, 248)

# 지역별 날씨 검색
for prob in regions:
    # 날씨 창 더블클릭 후 입력
    pyautogui.doubleClick(serX, serY)
    time.sleep(0.5)
    pyperclip.copy(prob+'날씨')
    pyautogui.hotkey('ctrl', 'v')
    time.sleep(0.5)
    pyautogui.write(['enter'])
    time.sleep(1)

    #캡쳐하기
    saveP = '기초프로그램\\'+'10_automouse\\'+ prob +'날씨'+'.png'
    pyautogui.screenshot(saveP, region = (startX, startY, endX-startX, endY-startY))

 

결과

 - 지역별로 날씨가 저장된다.

 

5. 원하는 지역 입력 받아 날씨 검색 후 저장하기 

 

- input 으로 원하는 지역을 입력받은 후 검색/저장하기

 

import py
import pyautogui
import time
import pyperclip

# 원하는 지역 입력받아 날씨 보여주기
prob = input('원하는 지역을 적으세요\n')

# 주소창 위치
addrX = 1129
addrY = 66

# 날씨검색 창 위치
serX = 1064
serY = 152

# 캡쳐 위치
startX = 992
startY = 251
endX = 1661
endY = 928

# 크롬 주소창으로 이동
pyautogui.moveTo(addrX, addrY)
time.sleep(0.2)
pyautogui.click()

# 전체선택 후 지우기
pyautogui.hotkey('ctrl'+'a')
time.sleep(0.2)
pyautogui.write(['delete'])
time.sleep(0.2)

# 네이버 입력
pyautogui.write('naver.com', interval = 0.05)
pyautogui.write(['enter'])
time.sleep(1)

# 네이버 검색 전용창 이동
pyautogui.click(1796, 248)

# 지역 날씨 검색
pyautogui.doubleClick(serX, serY)
time.sleep(0.5)
pyperclip.copy(prob+'날씨')
pyautogui.hotkey('ctrl', 'v')
time.sleep(0.5)
pyautogui.write(['enter'])
time.sleep(1)

#캡쳐하기
saveP = '기초프로그램\\'+'10_automouse\\'+ prob +'날씨'+'.png'
pyautogui.screenshot(saveP, region = (startX, startY, endX-startX, endY-startY))

 

결과

- vs code 터미널창에 원하는 지역 입력

- 우측 네이버에서 검색된 결과

- '홍천날씨.png'로 저장된 결과

 

 

마무리하며

예전 프로젝트에서 Simple hotkey 였나 하는 자동화 프로그램을 사서 쓴 적이 있는데,

파이썬 프로그램을 알면 무지 쉽게 할 수 있을텐데... 라는 생각만 했었다.

 

막상 이렇게 접하고 나니 정말 쉽네.

그 때는 몰랐었으니 좋은 프로그램 골라서 잘 쓰긴 썼는데

지금 생각하면 내가 프로그램 설치하고 돌렸으면 더 좋았을 걸 하는 생각이 든다.

 

다음 번에는 직접 할 수 있을 것 같다.

 

그 때 당시

1. 외부 장치에서 신호를 주면

2. 아두이노 레오나르도에서 받아서 PC에 알맞은 키값을 보내고

3. PC에서 그 키값을 받아서 Simple hotkey를 이용해 PC화면에 대고 조종을 했었다.

 

지금이라면 어떻게 바꿀 수 있었을까?

1. 연결된 신호라인이 몇가닥 있었으니

2. 그걸 이용해 485통신을 하고

3. 파이썬에서 바로 받아서 통제할 수 있을 것 같다.

4. 그럼 중간에 레오나르도나 Simple hotkey가 필요 없어지고, 그만큼의 AS 요소가 줄어들겠지.

 

... 흠... 파이썬 괜찮네~

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기