こんにちは、今回はPythonとSeleniumを使用してファイルをアップロードする方法について紹介します。ファイルアップロードはWebアプリケーションで非常に一般的な機能であり、Seleniumを使用することでブラウザ上で自動的にファイルをアップロードすることができます。
Contents
前準備
前提条件
・ Python 3.x
・Selenium==4.6.0
まず、必要なライブラリをインストールします。
$ pip install selenium $ pip install webdriver_manager
関連記事:SeleniumのChromeDriverの更新・バージョン管理を自動化する方法
アップロードサイトのHTML構造例
基本的にWebサイトのファイルをアップロード画面のHTMLの構成は以下のような感じになっています
<ソースコードイメージ>
<body>
<form action=”./confirm.php” method=”POST” enctype=”multipart/form-data”>
<table border=”1″>
<tr> <th>ファイル</th>
<td> <input name=”file” type=”file”> </td>
</tr>
</table>
<input name=”submit” type=”submit” value=”送信”>
</form>
</body>
<HTMLイメージ>
Seleniumでサイトにファイルをアップロードする
Seleniumのdriver.getでアップロード画面にアクセスした状態でdriver.find_element()でinputタグのXPATHを検証ツールで特定し、それをコピーしてformのinputタグのXPATHを指定します
elements = driver.find_element(By.XPATH, "<inputタグのXPATH>")
そしてそれに対して.send_keys(“ファイルパス”)でローカルPCのファイルのPATHを指定することでWebサイトに対してファイルをアップロードを行うことが可能です
elements.send_keys('<ローカルPCにあるアップロードしたいファイルのパス>')
Seleniumでファイルをアップロードするサンプルコード
上記の処理をまとめると以下のようになります
from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager from selenium import webdriver driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get("<アップロード先のURL>") # ファイルをアップロード elements = driver.find_element(By.XPATH, "<inputタグのXPATH>") elements.send_keys('<ローカルPCにあるアップロードしたいファイルのパス>') # アップロードボタンをクリック button = driver.find_element(By.XPATH, "<submitタグのXPATH>") button.click() driver.quit()
WindowsのファイルのPATHについて
<ローカルPCにあるアップロードしたいファイルのパス>で指定するアップロードするファイルのパスはWindowsだとエスケープ文字対策でファイルパスの文字列の先頭にrを付ける必要があります。
例えば、Usersの直下のフォルダのパスを指定する場合は以下のようなイメージです
r"C:\Users\81903"
以上で、PythonとSeleniumを使用してファイルをアップロードする方法がわかりました。ファイルがアップロードされた後、送信ボタンをクリックしてフォームを送信することができます。
これは、それぞれのWebアプリケーションによって異なりますが、基本的にはsubmit()メソッドを使用して送信ボタンをクリックします。 以上がPythonとSeleniumを使用したファイルアップロードの方法です
コメント
[…] 関連記事:【Python】Seleniumでファイルをアップロードするサンプルコード […]
[…] 関連記事:【Python】Seleniumでファイルをアップロードするサンプルコード […]
[…] 関連記事:【Python】Seleniumでファイルをアップロードするサンプルコード […]
[…] 関連記事:【Python】Seleniumでファイルをアップロードするサンプルコード […]