Не удалось найти атрибут «Файл» 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

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

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


person LNB    schedule 12.08.2017    source источник
comment
Сначала вам нужно развернуть подменю «Файл». Google Планета Земля — это приложение Qt5, поэтому вы можете посмотреть пример WireShark в репозитории для руководства (это также Qt5). В этом случае подменю можно расширить на _1_.   -  person Vishal Chhodwani    schedule 12.08.2017
comment
Трассировка (последний последний вызов): файл "", строка 1, в файле "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", строка 351 , в getattribute ctrls = self.__resolve_control(self.criteria) File "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) Файл "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( ** ква rgs) Файл "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\findwindows.py", строка 300, в find_elements elements = findbestmatch.find_best_control_matches(best_match, wraped_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', 'Tour Guide', 'Pane', '', 'Пользовательский', '0', '1', '2' , 'Панель0', 'Панель1', 'Панель2', '3', 'Панель3', '4', 'Панель4', '5', 'Панель5', '6', 'Панель6', '7', ' Custom0», «Custom1», «Custom2», «8», «Custom3», «9», «Custom4», «10», «Custom5», «11», «Custom6», «12», «Custom7» , '13', 'Пользовательский8', '14', 'Пользовательский9', '15', 'Пользовательский10', '16', 'Пользовательский11', '17', 'Пользовательский12', '18', 'Пользовательский13', ' 19", "Пользовательский14", "20", "Пользовательский15", "21", "Пользовательский16", "22", "Пользовательский17", "23", «Пользовательский18», «24», «Пользовательский19», «25», «Пользовательский20», «26», «Пользовательский21», «27», «Пользовательский22», «28», «Пользовательский23», «29», «Пользовательский24» ', "30", "Пользовательский25", "31", "Пользовательский26", "32", "Пользовательский27", "33", "Пользовательский28", "34", "Пользовательский29", "35", "Пользовательский30", "36", "Пользовательский31", "37", "Пользовательский32", "38", "Пользовательский33", "39", "Пользовательский34", "40", "Пользовательский35", "41", "Пользовательский36", "42" ', 'Custom37', '43', 'Custom38', '44', 'Custom39', '45', 'Custom40', '46', 'Custom41', '47', 'Custom42', '48', «Пользовательский43», «49», «Пользовательский44», «50», «Пользовательский45», «51», «Панель7», «52», «Панель8», «53», «Панель9», «54», «Панель10». ', '55', 'Панель11', '56', 'Панель12', '57', 'Панель13', '58', 'Панель14', '59', 'Пользовательский46', '60', 'Пользовательский47', «61», «Пользовательский48», «62», «Пользовательский49», «63», «Пользовательский50», «64», «Пользовательский51», «65», «Пользовательский52», «66», «Пользовательский53», «67». ', "Пользовательский54", "68", "Пользовательский55", "69", "Пользовательский56", "70", "Пользовательский57", "71", "Пользовательский58", "72", "Пользовательский59", "73", 'Custom60', '74', 'Custom61', '75', 'Custom62', '76', 'Custom63', '77', 'TitleBar', 'Sys tem», «SystemMenu», «Меню», «System0», «System1», «System2», «SystemMenuItem», «MenuItem», «Свернуть», «MinimizeButton», «Button», «Развернуть», «MaximizeButton» , 'Кнопка0', 'Кнопка1', 'Кнопка2', 'Кнопка Закрыть', 'Закрыть', 'Кнопка3'])'   -  person Vasily Ryabov    schedule 14.08.2017


Ответы (1)


Добро пожаловать в Stack Overflow На этом сайте предполагается, что вы попытаетесь написать код самостоятельно. Проведя дополнительные исследования, если у вас возникла проблема, вы можете опубликовать то, что вы пробовали, с четким объяснением того, что не работает, и предоставить минимальный, полный и проверяемый пример. Я предлагаю прочитать Как задать хороший вопрос и идеальный вопрос. Кроме того, обязательно пройдите тур и прочитайте это.

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
person LNB    schedule 12.08.2017