pywinauto.findwindows.ElementNotFoundError: 또는 AttributeError: WindowSpecification class has no 'SetFocus' method 에러 대응
pyWinauto를 이용하여 어플리케이션 프로그램의 자동화를 하고자 하는 경우
해당 커서를 텍스트에디터 항목에 위치시키고자 'SetFocus'를 사용하는 경우 위 에러 메시지가 발생하거나
ElementNotFoundError: 가 나는 경우
거의 2주동안 이방법 저방법 삽질하고 방법을 못찾다가 의외의 곳에서 해결하였다.
"C:\Program Files (x86)\Python36_32\python.exe" "C:/Users/Lee/Documents/02 Lecture_Study/16 Python_Croll/02 Daeshin_stock/Daeshin_DB/01_ver_check_01.py"
#2 <pywinauto.application.WindowSpecification object at 0x0741F9F0>
dlg <pywinauto.application.WindowSpecification object at 0x03BE1E70>
Traceback (most recent call last):
File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\application.py", line 245, in __resolve_control
criteria)
File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\timings.py", line 449, in wait_until_passes
raise err
pywinauto.timings.TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/Lee/Documents/02 Lecture_Study/16 Python_Croll/02 Daeshin_stock/Daeshin_DB/01_ver_check_01.py", line 40, in <module>
pass_ctrl.Set_Focus()
File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\application.py", line 351, in __getattribute__
ctrls = self.__resolve_control(self.criteria)
File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\application.py", line 248, in __resolve_control
raise e.original_exception
File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\timings.py", line 427, in wait_until_passes
func_val = func(*args)
File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\application.py", line 190, in __get_ctrl
dialog = self.backend.generic_wrapper_class(findwindows.find_element(**criteria[0]))
File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\findwindows.py", line 87, in find_element
raise ElementNotFoundError(kwargs)
pywinauto.findwindows.ElementNotFoundError: {'title': 'CREON Starter', 'class_name': '#32770', 'control_id': '0', 'backend': 'win32', 'process': 15180}
Process finished with exit code 1
결국은 set_focus에서 문제가 발생한 것은 아니었다.
app = application.Application()
app.start('C:/CREON/STARTER/coStarter.exe')
title = "CREON Starter"
dlg = timings.WaitUntilPasses(20, 0.5, lambda: app.connect(title=title)).Dialog
pass_ctrl = dlg.Edit2
time.sleep(10)
pass_ctrl.set_focus()
pass_ctrl.type_keys("ID")
cert_ctrl = dlg.Edit3
cert_ctrl.SetFocus()
cert_ctrl.TypeKeys("PWD")
btn_ctrl = dlg.Button0
btn_ctrl.Click()
dlg = timings.WaitUntilPasses(20, 0.5, lambda: app.connect(title=title)).Dialog
이부분의 수정을 통해서 문제 해결
app.window_(title=title)) ==> app.connect(title=title).Dialog
'IT > 파이썬' 카테고리의 다른 글
파이썬 자동로그인 (2) | 2018.05.06 |
---|---|
파이썬에서 Timeout Error 처리하기 (2) | 2018.05.05 |
findbestmatch.MatchError: 에러 처리 (1) | 2018.05.05 |
pywinauto 사용시 에러 수정방법 (0) | 2018.03.26 |