TransWikia.com

Selenium から Chrome を使ってファイルをダウンロードする際、ファイル名を指定する方法が分からない

スタック・オーバーフロー Asked by Tani chan on November 20, 2021

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

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

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

SeleniumのChrome driverのデフォルトダウンロードフォルダを設定する – Qiita

よろしくお願いします。

Pythonコード

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)

エラーメッセージ

  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

補足情報(FW/ツールのバージョンなど)

Python 3.7.3
Windows 7
Jupyter Notebook

One Answer

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

注意点
download.default_directoryにパスを設定するときは階層の区切り文字を\とするか、文字列の前にRAWの意味のrまたはRをつけて記述します。ex( r"C:Users{username}Downloadstest" )

このときドライブのルート階層の文字は区切り文字を1つex( C: )にしないとうまくいきません。chromedriverのパスはスラッシュ(/)区切りとし、webdriverをインスタンス化するときにexecutable_pathchrome_optionsを引数として渡します。

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

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXXXXXXXX escape

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


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

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検索から借用したメソッドにはエラーが発生する場合があります。 しかし、あなたはアイデアを得る。

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"))

Answered by kunif on November 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP