파이썬 pywinauto패키지 사용법과 관련하여 질문 드립니다.

조회수 2985회
Traceback (most recent call last):
  File "C:\Anaconda3\lib\ctypes\__init__.py", line 121, in WINFUNCTYPE
    return _win_functype_cache[(restype, argtypes, flags)]
KeyError: (<class 'ctypes.HRESULT'>, (<class 'ctypes.c_long'>, <class 'comtypes.automation.tagVARIANT'>, <class 'ctypes.c_long'>, <class 'comtypes.LP_POINTER(IUIAutomationTextRange)'>), 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/parkk/PycharmProjects/untitled1/openapi.py", line 1, in <module>
    from pywinauto import application
  File "C:\Anaconda3\lib\site-packages\pywinauto\__init__.py", line 89, in <module>
    from . import findwindows
  File "C:\Anaconda3\lib\site-packages\pywinauto\findwindows.py", line 42, in <module>
    from . import controls
  File "C:\Anaconda3\lib\site-packages\pywinauto\controls\__init__.py", line 36, in <module>
    from . import uiawrapper # register "uia" back-end (at the end of uiawrapper module)
  File "C:\Anaconda3\lib\site-packages\pywinauto\controls\uiawrapper.py", line 47, in <module>
    from ..uia_defines import IUIA
  File "C:\Anaconda3\lib\site-packages\pywinauto\uia_defines.py", line 181, in <module>
    pattern_ids = _build_pattern_ids_dic()
  File "C:\Anaconda3\lib\site-packages\pywinauto\uia_defines.py", line 169, in _build_pattern_ids_dic
    if hasattr(IUIA().ui_automation_client, cls_name):
  File "C:\Anaconda3\lib\site-packages\pywinauto\uia_defines.py", line 50, in __call__
    cls._instances[cls] = super(_Singleton, cls).__call__(*args, **kwargs)
  File "C:\Anaconda3\lib\site-packages\pywinauto\uia_defines.py", line 60, in __init__
    self.UIA_dll = comtypes.client.GetModule('UIAutomationCore.dll')
  File "C:\Anaconda3\lib\site-packages\comtypes\client\_generate.py", line 110, in GetModule
    mod = _CreateWrapper(tlib, pathname)
  File "C:\Anaconda3\lib\site-packages\comtypes\client\_generate.py", line 184, in _CreateWrapper
    mod = _my_import(fullname)
  File "C:\Anaconda3\lib\site-packages\comtypes\client\_generate.py", line 24, in _my_import
    return __import__(fullname, globals(), locals(), ['DUMMY'])
  File "C:\Anaconda3\lib\site-packages\comtypes\gen\_944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.py", line 2217, in <module>
    ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'children' )),
  File "C:\Anaconda3\lib\site-packages\comtypes\__init__.py", line 329, in __setattr__
    self._make_methods(value)
  File "C:\Anaconda3\lib\site-packages\comtypes\__init__.py", line 698, in _make_methods
    prototype = WINFUNCTYPE(restype, *argtypes)
  File "C:\Anaconda3\lib\ctypes\__init__.py", line 123, in WINFUNCTYPE
    class WinFunctionType(_CFuncPtr):
TypeError: item 2 in _argtypes_ passes a union by value, which is unsupported.

Process finished with exit code 1

위 내용은 아래의 코드를 파이참에서 실행시켰을 때 나오는 오류입니다.

from pywinauto import application
from pywinauto import timings
import time
import os

app = application.Application()
app.start("C:/Kiwoom/KiwoomFlash2/khministarter.exe")

title = "번개 Login"
dlg = timings.WaitUntilPasses(20, 0.5, lambda: app.window_(title=title))

pywinauto패키지를 윈도우 power shell에서 pip 명령어를 통해 다운로드를 받은 후 실행을 했습니다.

실행하려는 윈도우 파일도 설치되어있고 디렉토리 또한 문제가 없습니다.

파이참 파이썬 콘솔에서 패키지를 인식하지 못하는 것 아닐까?라는 의심이 들긴 하지만, 인식여부를 확인하는 방법을 몰라 헤매고 있는 상태입니다.

혹시라도, 제가 놓치고 있는 부분이나 이 오류를 해결하는 방법을 알려주신다면 정말 감사하겠습니다.

1 답변

  • 파이썬 버전을 확인해보시기 바랍니다.

    등록되어 있는 이슈이고 최신버전의 파이썬에서는 문제가 있습니다. 여기서 최신버전이라고 함은 ctypes 가 업데이트된 버전입니다.

    ctypes 에서 COM type 을 처리시 타입을 변경한 모양인데 python쪽 이슈로 다음 fix 버전에서 조치될 것으로 보입니다.

    즉 3.8.1 이나 3.7.6 등 제일 마지막 픽스 버전이 최신이면 문제가 됩니다.

    파이썬을 3.8.0 이나 3.7.5 로 다운그레이드하면 문제가 없습니다.

    https://github.com/pywinauto/pywinauto/issues/868

    • 3.7.5 도 문제가 있는 모양이군요 3.7.4 로 해야 될 듯 하네요. 정영훈 2020.2.16 11:39
    • 감사합니다. 3.7.4로 해보기 이전에 3.5가 이미 있어서, 먼전 실행해보았는데 바로 실행이됩니다. 그리고pywinauto 패키지를 윈도우 파워쉘에서 설치 했는데, 아나콘다 prompt에서 다시 설치를 하니 클래스 임포트도 이루어지네요!! 감사합니다. 덕분에 막히던 부분이 해결되었습니다!! 알 수 없는 사용자 2020.2.16 13:37

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)