12

次のように、Webdriverを介してファイルをダウンロードする場所を設定できることがわかります。

fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir",getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")

browser = webdriver.Firefox(firefox_profile=fp)

しかし、ダウンロード時にファイルに名前を付ける同様の方法があるかどうか疑問に思いました。1つのブラウザインスタンスから最大6000個のファイルをダウンロードし、ダウンロードごとにドライバを再起動する必要がないため、プロファイルに関連付けられているものではないことが望ましいです。


編集:選択した回答によって提案されたコードを使用したソリューション。各ファイルをダウンロードした後、ファイルの名前を変更します。

import os
os.chdir(SAVE_TO_DIRECTORY)
files = filter(os.path.isfile, os.listdir(SAVE_TO_DIRECTORY))
files = [os.path.join(SAVE_TO_DIRECTORY, f) for f in files] # add path to each file
files.sort(key=lambda x: os.path.getmtime(x))
newest_file = files[-1]
os.rename(newest_file, docName+".pdf")
4

2 に答える 2

4

少し奇妙な方法をお勧めします。可能であれば、Seleniumを使用してファイルをダウンロードしないでください。

つまり、ファイルのURLを取得し、urllibライブラリを使用してファイルをダウンロードし、「手動」でディスクに保存します。問題は、seleniumに「名前を付けて保存」ダイアログなどのWindowsダイアログを処理するツールがないことです。よくわかりませんが、どのOSダイアログでも処理できるとは思えません。間違っているので訂正してください。:)

これが小さな例です:

import urllib
urllib.urlretrieve( "http://www.yourhost.com/yourfile.ext", "your-file-name.ext")

ここでの唯一の仕事は、すべてのurllib例外を確実に処理することです。詳細については、 http://docs.python.org/2/library/urllib.html#urllib.urlretrieveを参照してください。

于 2012-11-10T08:33:20.830 に答える
3

このための純粋なSeleniumハンドラーがあるかどうかはわかりませんが、ダウンロードしたファイルで何かを行う必要があるときに行ったことは次のとおりです。

  1. 拡張子のない最新のファイルをダウンロードディレクトリでポーリングするループを設定します.part(これは部分的なダウンロードを示し、考慮されていない場合は時々トリップします。これにタイマーを設定して、ダウンロードが完了しない原因となるタイムアウト/その他のエラーの場合の無限ループls -t <dirname>。Linuxでコマンドの出力を使用しました(私の古いコードはcommands、非推奨であるため、ここでは表示しません:))、を使用して最初のファイル

    # result = output of ls -t
    result = result.split('\n')[1].split(' ')[-1]
    
  2. ループが正常に終了するwhileと、ディレクトリの最上位のファイルがファイルになり、それを使用してos.rename(または他の好きなものを使用して)変更できます。

おそらくあなたが探していた答えではありませんが、うまくいけばそれはあなたを正しい方向に向けます。

于 2012-11-09T23:38:18.630 に答える