Не удалось найти атрибут "Файл" Google Планета Земля с помощью pywinauto

Я хочу использовать Python (3.6) и pywinauto (0.6.3) для управления Google Планета Земля (7.1.8.3036) на платформе Windows 10 для сохранения изображения Google Планета Земля в файл. Я могу запустить Google Планета Земля из pywinauto и получить диалоговое окно Google Планета Земля, но не могу найти атрибут "Файл". Я пытался использовать app['Google Earth'].print_control_identifiers() но не удалось увидеть какой-либо атрибут для "Файл" (чтобы долго включать здесь).

Я ценю любую помощь или предложение, как это сделать app['Google Earth'].???('File -> Save -> Save Image...'), Простой альтернативой является использование горячих клавиш (Ctrl+Alt+S) в активном окне Google Планета Земля. Я пытался использовать SendKeys('^%S') или же type_keys('^%S'), но те не работали. Я не должен делать что-то правильно.

Вот как я пытался запустить Google Планета Земля и выяснить, есть ли какой-либо атрибут для "Файл":

app = Application(backend='uia').start('c:/Program Files (x86)/Google/Google Earth/client/googleearth.exe')

app['Google Earth'].File.click()

Трассировка (последний вызов был последним): Файл "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", строка 245, в критериях __resolve_control) Файл "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\timings.py", строка 447, в wait_until_passes, поднять ошибку pywinauto.timings.TimeoutError

Во время обработки вышеупомянутого исключения произошло другое исключение:

Трассировка (последний вызов был последним): файл "", строка 1, в файле "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", строка 351, в getattribute ctrls = self.__ resol_control(self.criteria) Файл "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", строка 248, в __resolve_control поднять файл e.original_exception "C: \ Users \ Brian \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ pywinauto \ timings.py", строка 425, в файле wait_until_passes func_val = func(*args) File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", строка 209, в __get_ctrl ctrl = self.backend.generic_wrapper_class(findwindows.find_element(**ctrl_criteria))) Файл "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\findwindows.py", строка 84, в элементах find_element elements = find_elements(**kwargs) Файл "C: \ Users \ Brian \ AppData \ Local \ Programs \ Python \ Python36 \ Lib \ сайт-ра ckages \ pywinauto \ findwindows.py ", строка 300, в элементах find_elements = findbestmatch.find_best_control_matches(best_match, wrapped_elems) Файл" C: \ Users \ Brian \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ pywinauto " \ findbestmatch.py ​​", строка 533, в find_best_control_matches поднять MatchError(items = name_control_map.keys(), tofind = search_text) pywinauto.findbestmatch.MatchError: Не удалось найти" Файл "в dict_keys(['Tour GuidePane', Guide', 'Pane', '', 'Custom', '0', '1', '2', 'Pane0', 'Pane1', 'Pane2', '3', 'Pane3', '4', "Pane4", "5", "Pane5", "6", "Pane6", "7", "Custom0", "Custom1", "Custom2", "8", "Custom3", "9", "Custom4" "10", "Custom5", "11", "Custom6", "12", "Custom7", "13", "Custom8", "14", "Custom9", "15", "Custom10", "16", "Custom11", "17", "Custom12", "18", "Custom13", "19", "Custom14", "20", "Custom15", "21", "Custom16", "22', 'Custom17', '23', 'Custom18', '24', 'Custom19', '25', 'Custom20', '26', 'Custom21', '27', 'Custom22', '28', 'Custom23', '29', 'Custom24', '30', 'Custom25', '31', 'Custom26', '32', 'Custom27', '33', 'Custom28', '34', 'Custom29', '35', 'Custom30', "36", "Custom31", "37", "Custom32", "38", "Custom33", "39", "Custom34", "40", "Custom35", "41", "Custom36", " 42', 'Custom37', '43', 'Custom38', '44', 'Custom39', '45', 'Custom40', '46', 'Custom41', '47', 'Custom42', '48', "Custom43", "49", "Custom44", "50", "Custom45", "51", "Pane7", "52", "Pane8", "53", "Pane9", "54", " Pane10', '55', 'Pane11', '56', 'Pane12', '57', 'Pane13', '58', 'Pane14', '59', 'Custom46', '60', 'Custom47', "61", "Custom48", "62", "Custom49", "63", "Custom50", "64", "Custom51", "65", "Custom52", "66", "Custom53", " 67', 'Custom54', '68', 'Custom55', '69', 'Custom56', '70', 'Custom57', '71', 'Custom58', '72', 'Custom59', '73', 'Custom60', '74', 'Custom61', '75', 'Custom62', '76', 'Custom63', '77', 'TitleBar', 'System', 'SystemMenu', 'Menu', 'System0', 'System1', 'System2', 'SystemMenuItem', 'MenuItem', 'Minimize', 'MinimizeButton', 'Button', 'Maximize', 'MaximizeButton', 'Button0', 'Button1', 'Button2', 'CloseButton', 'Close', 'Button3'])'

1 ответ

Я нашел способ сохранить изображение файла KML в Google Earth с помощью горячих клавиш (Ctrl+Alt+S). Но это побеждает ключевую цель использования pywinauto. Я все еще ищу лучший способ использования pywinauto для управления Google Планета Земля. Вот мой код Python вместе с комментариями:

import os, time
from pywinauto import Application
from pywinauto import keyboard

kmlfile = 'rcglic1457645225.kml'
kmlimage= kmlfile[:-3]+'jpg'
os.startfile(kmlfile)
time.sleep(15)      #wait for completely loading Google Earth

app = Application(backend='uia').connect(path='googleearth.exe')    #connect to the Google Earth process
dlg = app['Google Earth']   #connect to the Google Earth dialog
dlg['Maximize'].click()     #click on 'Maximize' button of the Google Earth window to have the best image
time.sleep(1)
keyboard.SendKeys('^%S')    #hot keys to save the image (Ctrl+Alt+S)
keyboard.SendKeys(kmlimage+'{ENTER}')   #enter the image file name
keyboard.SendKeys('{TAB}{ENTER}')       #use TAB to select 'Yes' and replace file if existed
dlg['Restore'].click()      #click on 'Restore' button of the Google Earth window to go back to normal
dlg['Close'].click()            #click on 'Close' button
keyboard.SendKeys('{TAB}{ENTER}')       #use TAB to select 'Discard' and close the Google Earth window
Другие вопросы по тегам