Project/[Python] 도서 정보 입력 프로그램

[도서 입력 프로그램] 4. Autoit 업로드창 제어

CodeNook; 2024. 6. 3. 14:08

[도서 정보 자동 입력 프로그램] 4. Autoit 업로드창 제어

 

길고긴 Selenium과의 사투가 끝났다. 이제는 프로그램 인터페이스만 신경쓰면 되겠다고 생각을 했는데...

이게 웬일.

문제는 항상 예상치 못한 곳에 산적해있다.

 

 

이번 문제는 상품 이미지나 대표 이미지를 등록할때 제어해야하는 '파일 열기창'이다. 처음엔 단순하게 Selenium으로 제어가 되겠지 생각했는데, 엄밀히 따져보니 이 열기 창은 브라우저가 아닌 윈도우에 해당하는 창인 관계로 Selenium으로 조작이 불가하다.

 

그렇다면 복잡하게 생각할것 없이 어차피 열기창으로 하는 일은 파일 이름창에 크롤링한 이미파일 웹주소를 입력(Ctrl+V)하고 열기(Enter키) 버튼을 누르면 되는것이니 pyautogui등 자동화 라이브러리로 키보드를 조작해서 문제를 해결하려했다.

 

그런데 이 방식을 적용하다보니 또 막상 단순하게 생각할 것이 아니라는 것을 알았다. 어느정도 시간차이(time라이브러리 사용)를 두고 Ctrl+V와 Enter키를 누르는 방식을 적용해보니 작동이 성공할 때도 있고 안될때도 있었다. 가장 큰 원인은 아무래도 웹에서 클릭을 하는것이니 웹페이지 로딩속도나 컴퓨터 환경에 따라 창이 뜨는 속도가 다를 수 있고, 만약 늦게 뜰경우 Ctrl+V나 Enter 키 입력이 먹혀버려서 아무것도 못하고 그대로 멈춰버리는 멍청이가 되어버린다. 그렇다고 time을 통한 대기 시간을 무작정 늘리자니 가뜩이나 느린 Selenium 제어 시간이 더 오래걸리는 답답함이 생긴다. 

 

구글, 스택오버플로우, 챗GPT 등등 이렇게 저렇게 검색해가며 찾아본 결과.

AutoIt이라는 방법을 찾아냈다!

 

AutoIt은 주로 윈도우 자동화에 사용하는 개별적인 스크립트언어로, 파이썬에도 pyautoit 라이브러리를 통해 AutoIt을 활용할 수 있다. AutoIt을 사용하면 단순히 윈도우 창에 관계없이 이미지 주소를 입력하는 것이 아니라 정확하게 파일 열기창이 열렸는지 확인하고 그 창 자체를 제어할 수 있다!

 

그럼 AutoIt을 사용해보자. 생소한 라이브러리일테니 먼저 설치부터 알아보자.

 

설치는 콘솔창에 pip install pyautoit 을 입력하여 설치한다. pyautoit은 AutoIt을 파이썬에서 사용할 수 있게 하는 라이브러리 이름이다. 설치후 이제 코딩을 해보자.

 

import autoit #import 이름이 pyautoit이 아닌 autoit임에 주의!

#파일 찾기 버튼 click
driver.find_element(By.XPATH, 'XPATH주소').click()

#열기창 객체인식
handle = "[class:#32770; TITLE:열기]"

#열기창이 로딩될때까지 최대 8초 대기
autoit.win_wait_active("열기", 8)

time.sleep(3)

#이미지 경로(Edit1)에 이미지 주소 입력
autoit.control_send(handle, "Edit1", save_path)

time.sleep(3)

#'열기'버튼 click
autoit.control_click(handle, "Button1")

 

위 코드에서 handle 객체의 [class:#32770]부분은 윈도우의 파일 열기창의 공통적인 class인데 혹시나 다른 창을 제어하고 싶다면 저 class 번호를 확인해야 한다. 확인하는 방법은 AutoIt프로그램 설치후 함께 설치되는 Autoit Window Info 프로그램으로 확인 가능하다.

Autoit Window Info(왼쪽 창)를 실행하고 제어하려는 창을 클릭하면 Basic Window Info에 Title과 Class정보가 조회된다.

 

이를 통해서 키보드만 제어해서 인터넷 환경에 따라 전체 프로그램이 먹통이 되는 경우를 방지하고 명확하게 파일 열기창을 제어할 수 있게 된다.

 

파이썬을 공부할때마다 느끼지만, 정말 없는 라이브러리가 없다. '이런 기능이 있을까?'싶어서 구글링을 해보면 나와 똑같은 고민을 했던 사람들이 꼭 있고, 그에 해당하는 적절한 라이브러리가 존재한다. 요즘 시대에 코딩에 꼭 필요한것은 코딩 문법을 외우는게 아니라 내 코드가 막힌 원인을 정확히 찾아내 질문을 잘하는 능력임을 새삼스레 느끼게 된다.

 

이번 포스팅은 여기까지 😎

 

파일 업로드 관련 이슈는 아직 끝나지 않았다...

다음 포스팅에서는 Pillow라이브러리로 gif파일을 jpg로 자동변환하는 방법을 알아보자.

 

이전글: [도서 입력 프로그램] 3-4. Selenium 캘린더 제어

 

[도서 입력 프로그램] 3-4. Selenium 캘린더 제어

[도서 정보 자동 입력 프로그램] 3-4. Selenium 캘린더 제어 오랜만의 포스팅이다. 1~2일에 하나씩은 꾸준히 올리고 싶은데 잘 되지 않는다. 요즘엔 머신러닝/딥러닝 쪽에 꽂혀서 틈날때마다 공부중

codenook.site

 

다음글: [도서 입력 프로그램] 5. Pillow GIF → JPG 변환 (feat. ChatGPT활용)

 

[도서 입력 프로그램] 5. Pillow GIF → JPG 변환 (feat. ChatGPT활용)

[도서 정보 자동 입력 프로그램] 5. Pillow GIF → JPG 변환 산 넘어 산이랬던가.. 자동화의 길은 멀고도 멀다.사람이 했을때 '이럴 때는 이렇게 해야지'하는 예외 사항들이 자동화를 위한 코딩 과정

codenook.site