Seleniumで指定フォルダにダウンロード + ファイルを指定のフォルダに移動する [Pythonチートシート]

Python

Pythonを使っていると複数のコードで共通して使用しているコードがあることに気付きます。その作業を完全に覚えていればいいのですが毎回ウェブで調べてコードを記述して、とすると目的の作業は同じなのにシートごとにコード記述方法が違ってしまい見にくくなってしまいます。
そんなことを解消するのがPythonチートシートです。
今回は「 Seleniumで指定フォルダにダウンロード + ファイルを指定のフォルダに移動する 」コードを紹介します。

環境設定
◆ Mac OS
◆ Python 3
◆ JupyterLab
◆ Selenium Chromedriver

想定する利用シーン

Pythonで自動でウェブ上からファイルをダウンロードして、指定のフォルダに保存したいなぁ

 

デフォルトのダウンロードフォルダには色々なファイルが入っているから、そこから移動したいファイルだけを探すのが大変。。

Seleniumのデフォルトのダウンロード先を変更できれば解決できますよ

PythonのSeleniumで定期的にサイトの最新情報をダウンロードして、指定のフォルダに保存したいという場合に使用できるコード例です。今回はウェブページ上で「ファイルをクリックしてダウンロード」する場合のコードです。

前準備 フォルダの作成

このコードの実行によりファイル名を読み込むフォルダ・ファイルはこのJupyterLabで作成した「.ipynb」ファイルとの相対パスで場所を示します。

今「.ipynb」を保存しているフォルダと同じ階層に「download」と「output」というフォルダを作成してください。

今回はこちらのtest用webページ中にある「test1.txt」という名のテキストファイルをダウンロードします。

Python Selenium テスト用ページ
こちらのページはPython Seleniumのテスト用ページです。Seleniumを用いたコードが知りたい方は以下のページを参照ください。 ダウンロード用サンプルファイル テキストファイル test1 画像ファイル

 

コード: Seleniumで指定フォルダにダウンロード + ファイルを指定のフォルダに移動する

それでは実際に「 Seleniumで指定フォルダにダウンロード + ファイルを指定のフォルダに移動する 」コードを紹介します。この作業を行うには「Selenium」「Shutil」「glob」を使用します。

実行結果

上記のコードを実行することで、指定のウェブページからダウンロードしたテキストファイルを「download」フォルダに保存し、その後download_test.txtとファイル名を変更して「output」フォルダに保存することができました。

 

コードの解説

以下に各コードごとの処理について解説していいきます。

Seleniumでデフォルトのダウンロード先を変更

以下の「STEP0:初期設定」でSeleniumによるダウンロード先を変更しております。今回「Selenium」ではchromedriverを使用しています。ダウンロード先を変更するのは、option.add_experimental_option("prefs", {"download.default_directory": download_path})でoptionに設定でき上記コード中のdownload_pathに保存先の絶対パスを指定します。

download_pathはそれぞれの環境に合わせて変更してください。

実行結果

別ウィンドウで、Chromeがシークレットウィンドウ表示で立ち上がれば成功です。

 

Chromeのダウンロード先の変更確認方法
Seleniumで開いたChrome中の設定でダウンロード先を確認することができます。
①右上の「メニュー」から「設定」をクリック

②「詳細設定」から「ダウンロード」をクリック

③保存先が確認できます。

Seleniumでパスを指定する際には絶対パスを使用すること
このとき、Jupyter Lab / notebookと同じように「相対パス」で記載してしまうと、Chromeからはそのパスにたどり着けないため「絶対パス(フルパス)」を指定するようにしてください。

 

Seleniumでファイルダウンロード (クリック)

次にこちらのtest用webページへSeleniumでアクセスして、ページ中にある「test1.txt」という名のテキストファイルをクリックすることでダウンロードします。
このファイルはクリックすることでダウンロードできる設定のため、file_link = browser.find_element_by_id("download_text")でダウンロード対象のファイルを指定し file_link.click()でクリックすることがダウンロード操作となります。

実行環境によっては、URLへのアクセスに時間がかかりファイルのダウンロード時にまだページ側が準備できていないことがあります。そこでtime.sleep(秒数)としてわざと実行時の時間に余裕分を持たせることでエラーなく処理を進めることができます。

実行結果

上記のコードを実行することで、指定のウェブページからダウンロードしたテキストファイル「test1.txt」を「download」フォルダに保存することができました。

この後、そのファイルをdownload_test.txtとファイル名を変更して「output」ファイルに移動させます。

 

datetime.strftimeでdatetimeからstr変換

shutil」「glob」モジュールを使用してファイル名の変更とフォルダ移動を行います。move_file()関数を定義し、「ワイルドカード(*)」で定義した拡張子「.txt」を含むファイルを指定したフォルダ(ここでは「output」)に移動し、その際にファイル名もdownload_test.txtと変更しております。

実行結果

上記のコードを実行することで、指定のウェブページから「download」フォルダに保存していたテキストファイルを、その後download_test.txtとファイル名を変更して「output」フォルダに保存することができました。

shutil モジュールはファイルやフォルダ操作を行うモジュールで特にファイルの移動、コピーや削除のための関数が用意されています。

参照:Pythonライブラリ

 

最後に

Pythonチートシートで毎回よく使う作業のPythonコードをまとめ、今回は「Seleniumで指定フォルダにダウンロード + ファイルを指定のフォルダに移動する」コードを紹介しました。

他にもいろいろなチートシートを用意しておりますので以下から確認してみてください。

普段よく使う作業の[ Pythonチートシート ]
Pythonを使っていると複数のコードで共通して使用しているコードがあることに気付きます。その作業を完全に覚えていればいいのですが毎回ウェブで調べてコードを記述して、とすると目的の作業は同じなのにシートごとにコード記述方法が違ってしまい見に...

コメント

  1. […] Seleniumで指定フォルダにダウンロード + ファイルを指定のフォルダに移動する […]

タイトルとURLをコピーしました