Я только что установил pywinauto-0.4.2 для Python 2.7.8 (на 64-разрядной машине Windows 7). Я пытался пример цитируемое на pywinautoОшибка сохранения веб-страницы Firefox с использованием pywinauto в Python
Исходный код для программы SaveFromFirefox.py (указанной в приведенном выше URL) является:
from pywinauto.application import Application
import sys
import time
import os.path
if len(sys.argv) < 2:
print "please specify a web address to download"
sys.exit()
web_addresss = sys.argv[1]
if len(sys.argv) > 2:
outputfilename = sys.argv[2]
else:
outputfilename = web_addresss
outputfilename = outputfilename.replace('/', '')
outputfilename = outputfilename.replace('\\', '')
outputfilename = outputfilename.replace(':', '')
# start IE with a start URL of what was passed in
app = Application().start_(
r"c:\program files\Mozilla Firefox\Firefox.exe %s"% web_addresss)
# some pages are slow to open - so wait some seconds
time.sleep(4)
# mozilla is one of thos applications that use existing windows
# if they exist (at least on my machine!)
# so if we cannot find any window for that process
# - find the actual process
# - connect to it
if app.windows_():
mozilla = app.window_(title_re = ".*Mozilla Firefox")
else:
app = Application().connect_(title_re = ".*Mozilla Firefox")
mozilla = app.window_(title_re = ".*Mozilla Firefox")
# ie doesn't define it's menus as Menu's but actually as a toolbar!
print "No Menu's in FireFox:", mozilla.MenuItems()
# File -> Save As
mozilla.TypeKeys("%FA")
#ie.Toolbar3.PressButton("File")
app.SaveAs.FileNameEdit.SetEditText(outputfilename)
app.SaveAs.Save.CloseClick()
# if asked to overwrite say yes
if app.SaveAs.Yes.Exists():
app.SaveAs.Yes.CloseClick()
print "saved:", outputfilename
# File close tab or close
#(Firefox makes it easy for us having the same shortcut for both!
mozilla.TypeKeys("%FC")
Когда я пытаюсь выполнить файл в командной строке , он открывает браузер firefox и открывает диалоговое окно «Сохранить как», но не нажимает кнопку «Сохранить».
Скорее, это дает следующее сообщение об ошибке:
C:\Users\arun_m\Desktop>python2 SaveFromFirefox.py www.google.com
No Menu's in FireFox: []
Traceback (most recent call last):
File "SaveFromFirefox.py", line 51, in <module>
app.SaveAs.FileNameEdit.SetEditText(outputfilename)
File "C:\Python27\lib\site-packages\pywinauto\application.py", line 229, in __getattr__
ctrls = _resolve_control(self.criteria)
File "C:\Python27\lib\site-packages\pywinauto\application.py", line 795, in _resolve_control
raise e.original_exception
pywinauto.findbestmatch.MatchError: Could not find 'FileNameEdit' in '['', u'ShellView', u'Address: D:\\My_Dox_backup\\Work\\Automation Factory\\Selenium\\Sikuli', u'DUIViewWndClas
sName', 'Toolbar4', u'ShellViewSHELLDLL_DefView', u'Namespace Tree Control', u'Breadcrumb Parent', u'Address Band Root', u'Tree ViewTreeView', u'UniversalSearchBand', u'SearchEditB
oxWrapperClass', 'ComboBox2', 'Progress', 'ComboBox0', 'ComboBox1', 'Toolbar2', u'CtrlNotifySink', u'ScrollBar', '20', '21', '22', '23', u'FloatNotifySink0', 'ComboBox', u'FloatNot
ifySink2', u'TravelBand', u'WorkerW', '1', '0', '3', '2', '5', '4', '7', '6', u'NamespaceTreeControl', '8', '12', 'TreeView', 'Toolbar1', u'CancelButton', 'Toolbar', '11', u'Search
Box', 'ReBar', 'Edit', 'Button', u'CtrlNotifySink0', u'CtrlNotifySink1', u'CtrlNotifySink2', 'Toolbar3', '9', 'Button1', 'Button0', u'FloatNotifySink', u'DirectUIHWND3', u'&SaveBu
tton', u'DirectUIHWND', '10', '13', u'CancelScrollBar', '15', '14', '17', 'Button2', '19', '18', u'Tree View', '16', u'SHELLDLL_DefView', u'Namespace Tree ControlNamespaceTreeContr
ol', u'&Save', u'Address: D:\\My_Dox_backup\\Work\\Automation Factory\\Selenium\\SikuliToolbar', 'Toolbar0', u'FloatNotifySink1', u'DirectUIHWND1', u'DirectUIHWND0', u'Cancel', u'D
irectUIHWND2']'
Что идет не так?
Предположительно, Firefox изменился с момента написания этого образца, а в диалоговом окне «Сохранить» больше нет поля с именем «FileNameEdit». Вам нужно будет прочитать документы PyWinAuto, чтобы узнать, как найти правильное имя для этого поля. – abarnert
В настоящее время я использую браузер Firefox 34 – Arun
Несомненно, и образец не обновлялся с марта 2013 года, и в этот момент Firefox был на версии 17 или около того, поэтому совсем неправдоподобно, чтобы образец был устаревшим. Опять же, вам нужно будет прочитать документы, которые объяснят, как найти правильное имя для нужного поля. (И затем файл ошибка против pywinauto, чтобы получить образец исправлен.) – abarnert