

Selenium から Google Chrome を自動操作し、CSVダウンロードボタンの要素をクリックしてダウンロードさせることまでできました。

ダウンロードする時に「名前を付けて保存」のダイアログが出てくるのですが、「保存する場所」「ファイル名」を指定する方法を教えてください。

以下のサイトを参考に試してみましたがエラーになりました。

[SeleniumのChrome driverのデフォルトダウンロードフォルダを設定する -
Qiita](https://qiita.com/hikoalpha/items/fa8330391823aea2fbca)

よろしくお願いします。

### Pythonコード

[code]

    from selenium import webdriver
    
    chromeOptions = webdriver.ChromeOptions("chromedriver.exe")
    prefs = {"download.default_directory" : "C:\Users\\*****\\Desktop"}
    chromeOptions.add_experimental_option("prefs",prefs)
    #Chrome diriverのパス
    chromedriver = "chromedriver.exe"
    
    driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=chromeOptions)
    
[/code]

### エラーメッセージ

[code]

      File "<ipython-input-1-41dea91d03de>", line 4
        prefs = {"download.default_directory" : "C:\Users\\*****\\Desktop"}
                                               ^
    SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
    
[/code]

### 補足情報（FW/ツールのバージョンなど）

Python 3.7.3  
Windows 7  
Jupyter Notebook


CC BY-SA 4.0
2019-12-19T10:07:46.280
61583
2022-07-09T11:03:55.357
2021-02-15T00:23:42.720
3060
37133
question
python python3 selenium chromedriver
Selenium から Chrome を使ってファイルをダウンロードする際、ファイル名を指定する方法が分からない


ちなみに、それはまさに紹介記事の注意点に書いてある内容ではないですか？

> **注意点**  
>
> `download.default_directory`にパスを設定するときは階層の区切り文字を`\\`とするか、文字列の前にRAWの意味の`r`または`R`をつけて記述します。`ex(
> r"C:\Users\{username}\Downloads\test" )`
>
> このときドライブのルート階層の文字は区切り文字を1つ`ex( C:\
> )`にしないとうまくいきません。chromedriverのパスはスラッシュ(`/`)区切りとし、webdriverをインスタンス化するときに`executable_path`と`chrome_options`を引数として渡します。

エラーコードの以下のメッセージは、パス先頭`C:\Users`の`\U`がUnicode16進数8桁のエスケープ表現の始まりだと判断したが、16進数8桁が続いていないのでエラーになった、と言っているのだと思います。

>
[code]

>     SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in
> position 2-3: truncated \UXXXXXXXX escape
>  
[/code]

紹介記事の注意点のように文字列の前にRAWの意味の`r`または`R`を付けて以後の`\\`も2つではなく1つにするか、逆に`C:\Users`の`\`を2つにするかすれば良いのではないでしょうか？

* * *

それから本来の名前付けに関して、この記事では「名前を付けてダウンロードすることは出来ない」が、「ダウンロードしたファイルの名前を変えることは出来る」と書いてあるようです。  
[Selenium give file name when
downloading](https://stackoverflow.com/q/34548041/9014308)

> You cannot specify name of download file through selenium. However, you can
> download the file, find the latest file in the downloaded folder, and rename
> as you want.  
>  Note: borrowed methods from google searches may have errors. but you get
> the idea.
>
> Seleniumを使用してダウンロードファイルの名前を指定することはできません。
> ただし、ファイルをダウンロードし、ダウンロードしたフォルダーで最新のファイルを見つけて、必要に応じて名前を変更できます。  
>  注：Google検索から借用したメソッドにはエラーが発生する場合があります。 しかし、あなたはアイデアを得る。
[code]

>     import os
>     import shutil
>     filename = max([Initial_path + "\\" + f for f in
> os.listdir(Initial_path)],key=os.path.getctime)
>     shutil.move(filename,os.path.join(Initial_path,r"newfilename.ext"))
>  
[/code]


CC BY-SA 4.0
2019-12-20T03:52:59.407
61606
2019-12-20T04:05:36.940
2019-12-20T04:05:36.940
26370
26370
61583
answer