프로그래밍/파이썬(Python)

파이썬 자동화 - 인터넷 익스플로러 창 열고 검색하기

&+&& 2018. 8. 5. 03:29

  회사내에서 단순 작업을 줄여보고자 하는 의도에서 자동화 작업을 생각중이다. 회사 업무 중에 단순 클릭 처리만 하면 되는 건 오토핫키를 써서 몇 가지 작업을 해 놓긴 했지만, 외부파일을 연계한다거나 하는 기능은 오토핫키를 잘 모르는 관계로 파이썬으로 해보려고 기본 작업부터 테스트 중이다.  먼저 기초적인 익스플로러 창 확인 및 검색어 입력부터 테스트 해 봤다.

 

1. 관련 함수 정의

import webbrowser 
import os 
import win32ui, win32gui 
import win32com.client, win32con 
import time import pyautogui

# windowname을 확인해서 핸들을 반환 또는 False 반환 
def checkWindow(windowname):     
  try:         
    return win32gui.FindWindow(None, windowname)     
  except:         
    return False  

# 원하는 URL 주소로 IE창을 연다 
def createIE(urladdress):     
  iexplore = os.path.join(os.environ.get("PROGRAMFILES", "c:\\Program Files"), "Internet Explorer\\IEXPLORE.EXE")     
  ie = webbrowser.BackgroundBrowser(iexplore)     
  return ie.open(urladdress)  
  
 # 원하는 iexplorer 창을 front로 가져온다 
 def selectAppFront(hwndmain):     
   try:         
     shell = win32com.client.Dispatch("WScript.Shell")         
     shell.SendKeys('%')         
     win32gui.ShowWindow(hwndmain, win32con.SW_MAXIMIZE)         
     win32gui.SetForegroundWindow(hwndmain)     
   except:         
     print("Windows SetForeground Error")  
     
 # 클립보드에 텍스트 저장 
 def addToClipBoard(sendtext):     
   command = 'echo ' + sendtext.strip() + '| clip'     
   os.system(command)      
   
 # 원하는 검색어에 따라 검색 
 def searchKeyword(searchword, margin):     
   addToClipBoard(searchword)          
   try:         
     locationXY = pyautogui.locateOnScreen('naversearchtext1.png',
     region=(0,0,1000,1000))         
     locationX, locationY = locationXY[0]+margin[0], locationXY[1]+margin[1]
     pyautogui.click(locationX, locationY)         
     pyautogui.hotkey('ctrl', 'a')         
     pyautogui.press('del')         
     pyautogui.hotkey('ctrl', 'v')         
     pyautogui.press('enter')         
     time.sleep(2)     
   except Exception as e:         
     print(e)

  일단은 pyautogui.locateOnScreen 이미지 검색을 통해서 위치를 확인한 뒤에 적당한 margin값으로 선택을 해서 검색어를 입력을 하게 했다. 뭐, 실제 업무에 적용할 때는 위치값이 고정이 되어 있는 부분들이 많아서 고정좌표와 이미지검색을 섞어서 구현하게 될 것 같다.

  특이 사항은 pyautogui에서 한글 처리가 안 되기 때문에 ClipBoard에 집어넣는 부분을 따로 구현하고, 붙여넣는 것도 paste가 아닌 hotkey('ctrl', 'v')로 처리했다. 아마 Clipboard에 복사하는 부분까지는 pyautogui를 사용해도 될 것 같다.

 

 

2. 함수 사용

naversearchMargin1 = (85,47) 
naversearchMargin2 = (150, 30) 
searchword = input().strip() 
hwndmain = checkWindow('NAVER - Internet Explorer') 

if hwndmain == False: 
  createIE('http://www.naver.com') 
  time.sleep(2) 
  hwndmain = checkWindow('NAVER - Internet Explorer') 

time.sleep(2) 
selectAppFront(hwndmain) 
searchKeyword(searchword, naversearchMargin1)​

 

  블로그에 올릴 줄 알았으면 다음에서 검색하는 걸로 할 걸 그랬다. input()을 받아서 검색하는 걸로 테스트했는데, 업무 적용시에는 excel 파일을 읽어서 값 추출 후 입력하는 방식으로 구현할 예정이다. 

 

 

  jupyter notebook에서 테스트 할 때는 이런 모습. 잘 작동한다. time.sleep()를 통해서 약간의 지연 처리를 한 상태인데 업무에 적용할 때는 상당히 지연이 심한 편이라서 wait 구현을 어떤 식으로 할지 생각 좀 해봐야겠다.