Ниже мой вклад также с использованием Pywinauto.
Я использовал Internet Explorer в качестве браузера (поэтому установите Internet Explorer в качестве программы по умолчанию для SWF-файлов), так как я нашел, что он загружает SWF-файлы быстрее всего (я знаю ... странно верно).
Я также использовал Adobe Acrobat для печати. (кажется, что дескриптор диалога печати похож на большинство программ, хотя у вас могут не возникнуть проблемы). Поскольку я использовал Adobe, мне пришлось изменить свой дескриптор диалогового окна печати с
window.OK.нажмите на window.Print.click (в строке 61)
Также вам может потребоваться изменить значения для строки ниже (строка 43). Поскольку разрешение экрана может отличаться от моего.
browser_tab.click_input (ords = (1440, 2060))
Извините, если это не объясняется должным образом, а также потому, что это python, пожалуйста, проверьте правильность отступа в приведенном ниже коде.
import sys import re import os import warnings import webbrowser from time import sleep import pywinauto as pwa from pywinauto.application import Application from pywinauto.keyboard import SendKeys def sendkey_escape(string): """Escape `+ ^ % ~ { } [ ] ( )` by putting them within curly braces. Refer to sendkeys' documentation for more info: * https://github.com/zvodd/sendkeys-py-si/blob/master/doc/SendKeys.txt (Could not open the original site: rutherfurd.net/python/sendkeys/ ) """ return re.sub(r'([+^%~{}\[\]()])', r'{\1}', string) warnings.filterwarnings( 'once', message=r'.*64-bit application should.*', category=UserWarning ) filenames = os.listdir(os.getcwd()) app = Application() for filename in filenames: #pwa.timings.Timings.Slow() if not filename.endswith('.swf'): continue pdfname = filename[:-3] + 'pdf' if pdfname in filenames: # Already there! continue # Assume the default application to open swf files is browser_tab. webbrowser.open(filename) sleep(2) app.connect(title_re='.*Explorer', class_name='IEFrame') browser_tab = app.IEFrame browser_tab.wait('active') browser_tab.set_focus() #below to enable activex controls browser_tab.click_input(coords=(1440, 2060)) sleep(2) browser_tab.right_click_input(coords=(500, 500)) # Click "print" from the rightclick menu. browser_tab.click_input(coords=(540, 645)) pwa.timings.wait_until_passes( 20, 0.5, browser_tab[u'Print'].Exists, pwa.findwindows.WindowNotFoundError ) app2 = Application().connect(title=u'Print') pwa.timings.Timings.Defaults() window = app2.Print window.wait('ready') button = window.Print button.Click() pwa.timings.wait_until_passes( 20, 0.5, browser_tab[u'Save PDF File As'].Exists, pwa.findwindows.WindowNotFoundError ) app3 = Application().connect(title=u'Save PDF File As', class_name='#32770') window = app3.Dialog combobox = window[u'4'] combobox.set_focus().type_keys(sendkey_escape(os.getcwd() + '\\' + pdfname), with_spaces=True) window.Save.Click() pwa.timings.wait_until_passes( 20, 0.5, app[u'Creating Adobe PDF'].Exists, pwa.findwindows.WindowNotFoundError ) app4 = app.connect(title=u'Creating Adobe PDF', class_name='#32770') window3 = app4.Dialog window3.wait_not('active',20,1) browser_tab.Close()
Я использовал SWAPY, чтобы получить контрольные идентификаторы каждого окна. Однако SWAPY использует старый код (хотя он все еще очень полезен), поэтому я обновил код, чтобы он отражал и поддерживал текущую версию pywinauto (по крайней мере, для меня в любом случае). Если вы посмотрите на нее, то вызовы функций будут почти такими же, но они просто преобразуются из camelcase в underscore_case.