我尝试通过点击网页上的链接自动下载文件。 点击链接后,我会看到“文件下载”窗口对话框,其中包含“打开”,“保存”和“取消”按钮。我想点击“保存”按钮。
我以下列方式使用watsup库:
from watsup.winGuiAuto import *
optDialog = findTopWindow(wantedText="File Download")
SaveButton = findControl(optDialog,wantedClass="Button", wantedText="Save")
clickButton(SaveButton)
由于某种原因,它不起作用。有趣的是,完全一样 代码完美地点击“取消”按钮,但它拒绝使用 “保存”或“打开”。
有人知道我应该做什么吗?
非常感谢, 武
答案 0 :(得分:1)
萨沙,
出于安全原因,您引用的文件对话框(Security Warning file download dialog)很可能不会以这种方式响应Windows消息。该对话框专门用于响应用户用鼠标单击OK按钮。我想你会发现Run按钮也不会这样。
答案 1 :(得分:0)
试试这个:
from watsup.winGuiAuto import *
optDialog = findTopWindow(wantedText="File Download")
SaveButton = findControl(optDialog, wantedClass="Button", wantedText="Submit")
clickButton(SaveButton)
答案 2 :(得分:0)
可能不会始终启用保存按钮。虽然它可能看起来像是一个程序,但是程序可能会看到您缺少的初始状态。检查它的状态并等待它启用。
[编辑]但罗伯特可能是正确的,出于安全原因,对话框会忽略你。在这种情况下,我建议使用BeautifulSoup来解析HTML,提取URL并使用urllib2 module在Python中下载文件。
答案 3 :(得分:0)
萨沙,
this link处的代码应该有效。它使用ctypes而不是watsup.winGuiAuto,并依赖于win32调用。这是代码:
from ctypes import *
user32 = windll.user32
EnumWindowsProc = WINFUNCTYPE(c_int, c_int, c_int)
def GetHandles(title, parent=None):
'Returns handles to windows with matching titles'
hwnds = []
def EnumCB(hwnd, lparam, match=title.lower(), hwnds=hwnds):
title = c_buffer(' ' * 256)
user32.GetWindowTextA(hwnd, title, 255)
if title.value.lower() == match:
hwnds.append(hwnd)
if parent is not None:
user32.EnumChildWindows(parent, EnumWindowsProc(EnumCB), 0)
else:
user32.EnumWindows(EnumWindowsProc(EnumCB), 0)
return hwnds
这是一个调用它来点击任何窗口上的“确定”按钮的示例 标题“下载属性”(很可能有0或1个这样的窗口):
for handle in GetHandles('Downloads properties'):
for childHandle in GetHandles('ok', handle):
user32.SendMessageA(childHandle, 0x00F5, 0, 0) # 0x00F5 = BM_CLICK