2014-12-18 1 views
4

Я только что установил 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']' 

Что идет не так?

+0

Предположительно, Firefox изменился с момента написания этого образца, а в диалоговом окне «Сохранить» больше нет поля с именем «FileNameEdit». Вам нужно будет прочитать документы PyWinAuto, чтобы узнать, как найти правильное имя для этого поля. – abarnert

+0

В настоящее время я использую браузер Firefox 34 – Arun

+0

Несомненно, и образец не обновлялся с марта 2013 года, и в этот момент Firefox был на версии 17 или около того, поэтому совсем неправдоподобно, чтобы образец был устаревшим. Опять же, вам нужно будет прочитать документы, которые объяснят, как найти правильное имя для нужного поля. (И затем файл ошибка против pywinauto, чтобы получить образец исправлен.) – abarnert

ответ

1

Просто измените

app.SaveAs.FileNameEdit.SetEditText(outputfilename) 

в

app.SaveAs.Edit.SetEditText(outputfilename) 

Это работает для меня на Firefox 34.0.5. Я также изменил путь к

app = application.Application().start_(
r"C:\Program Files (x86)\Mozilla Firefox\firefox.exe %s"% web_addresss) 

Это на Win7 x64 + Python 2.6.6 (32-разрядная версия).

Основная причина, по которой это не сработало, - это изменить стандартный диалог открытия/сохранения в Win7 по сравнению с WinXP. Вероятно, этот пример был написан на WinXP несколько лет назад.

+0

Спасибо, Василий, позвольте мне попробовать и вернуться к вам. – Arun

+0

Работает ли он для вас? –

+1

Василий, я использовал «Сикули» для автоматизации принятия диалогового окна, которое неизбежно появилось в Firefox, несмотря на то, что оно использовало многие «трюки», чтобы попытаться подчинить его. Теперь это работает. – Arun

Смежные вопросы