2009-05-24 7 views
3

ウェブページ上のリンクをクリックしてファイルを自動的にダウンロードしようとしています。 リンクをクリックすると、「ファイルを開く」、「保存する」、「キャンセル」のボタンが表示されます。保存ボタンをクリックします。Pythonでファイルをダウンロードする際の問題

私は、次のようにwatsupライブラリを使用

:それは動作しませんいくつかの理由について

from watsup.winGuiAuto import * 

optDialog = findTopWindow(wantedText="File Download") 

SaveButton = findControl(optDialog,wantedClass="Button", wantedText="Save") 

clickButton(SaveButton) 

。興味深いのは、まったく同じ コードが「キャンセル」ボタンをクリックするのに完全に機能することですが、 「保存」または「開く」を使用することを拒否しています。

私は何をすべきですか?

from watsup.winGuiAuto import * 
optDialog = findTopWindow(wantedText="File Download") 
SaveButton = findControl(optDialog, wantedClass="Button", wantedText="Submit") 
clickButton(SaveButton) 
+1

本当に単純な「ボタン」か「送信ボタン」です​​か? –

+0

通常の「ファイルのダウンロード」ウィンドウには、通常の「開く」、「保存」、および「キャンセル」ボタンがあります。これは、Webからファイルをダウンロードするたびに開かれる通常のウィンドウです。 – Sasha

答えて

0

はこれを試してみてください、非常に多くの 、ありがとうございました。あなたの目には見えるかもしれませんが、プログラムは、あなたが紛失している最初の状態を見るかもしれません。状態を確認し、有効になるまで待ちます。

[編集]しかし、ロバートが正しかった可能性があります。セキュリティ上の理由から、ダイアログでは無視されます。この場合、BeautifulSoupを使用してHTMLを解析し、URLを抽出し、urllib2 moduleを使用してPythonでファイルをダウンロードすることをお勧めします。

+0

ボタンのテキストは 'Save'なので、これはうまくいくとは思いません。 –

+0

「保存」は機能しません。なぜなのかご存知ですか? –

+0

これは動作しません。実際には、コマンド SaveButton = findControl(optDialog、wantedClass = "Button"、wantedText = "Save")は実際に動作します。私は によって知ることができます。ボタンが認識されていることがわかっているので、 '&Save'を返すwin32gui.GetWindowText(SaveButton) しかし、後に適用されるコマンドclickButton(SaveButton)は機能しません。 – Sasha

0

それはボタンを救うには常に有効ではない可能性があります:

はサーシャ

+0

私が以前に書いたように、ボタンは通常のウィンドウボタンであり、htmlページの一部ではありません。ファイルのダウンロード中は、通常の「開く」、「保存」、「キャンセル」ボタンを使用して、「ファイルのダウンロード」ウィンドウが開きます。 [保存]を押すと、ウィンドウに名前を付けて保存ウィンドウが開き、ファイル名を入力して別の[保存]ボタンを押します。しかし、私はまだ最初のウィンドウで立ち往生しています... – Sasha

+0

私の答えを更新しました。しかし、私はロバートハーヴェイが正しいと思います。 –

0

サーシャ、

this linkのコードが動作するようになっています。 watsup.winGuiAutoではなくctypesを使用し、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、そのようなウィンドウがある)を持つ任意のウィンドウで[OK]ボタンをクリックして、それを呼び出す例です

for handle in GetHandles('Downloads properties'): 
for childHandle in GetHandles('ok', handle): 
user32.SendMessageA(childHandle, 0x00F5, 0, 0) # 0x00F5 = BM_CLICK 
+0

Nop、同じ症状:Saveボタンが機能しない、Cancelが完全に機能する。 これは例です(同じページではありませんが、同じ問題が再現されています)。 移動先:誰か場合、私は非常にGREATFULだろう、私は非常に – Sasha

+0

になり、その後 http://www.winzip.com/downwz.htm ダウンロード評価をクリックして、Pythonのを使用して[保存]ボタンをクリックしてみてください... これで私を助けることができました... ありがとうございます。 Sasha – Sasha

+0

Sashaは、Winzip以外のプログラムでも動作しますか? WinzipプログラムがWin32呼び出しをインターセプトして破棄している可能性があります。 –

1

サーシャ、

あなたが(Security Warning file download dialog)を参照してファイルダイアログは、セキュリティ上の理由から、このようにWindowsメッセージに応答しない可能性が高いです。このダイアログは、マウスで[OK]ボタンを物理的にクリックしたユーザにのみ応答するように特別に設計されています。私はあなたが実行ボタンがこの方法でも動作しないことがわかると思います。

関連する問題