PythonとSeleniumを使用してWebページからファイルをダウンロードし、そのファイル名を取得する方法について説明します。
ダウンロード先の設定
まず、ダウンロード先のフォルダを指定します。これは、開発環境ごとに異なるダウンロード場所になってしまうことを防ぐためです。以下のコードは、ChromeDriverの立ち上げ時にダウンロードフォルダを設定する例です。
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.chrome.webdriver import WebDriver
import os
downloadsFilePath = './downloads'
class WebDriverModule(object):
def getChromeDriver(self)->WebDriver:
return webdriver.Chrome(options=self.getCoromeOptions())
def getCoromeOptions(self)->ChromeOptions:
options = ChromeOptions()
prefs = {
"plugins.always_open_pdf_externally": True,
"profile.default_content_settings.popups": 1,
"download.default_directory": os.path.abspath(downloadsFilePath) + r"\\\\",
"directory_upgrade": True
}
options.add_experimental_option("prefs", prefs)
return options
webDriverModule = WebDriverModule()
driver = webDriverModule.getChromeDriver()
このコードでは、plugins.always_open_pdf_externally=True
を設定することで、PDFファイルにアクセスした際に、デフォルトのViewerを使う処理を制御し、ファイルを直接ダウンロードできます。
ファイル名の取得
次に、ダウンロードしたファイルの名前を取得します。これは、ダウンロード直後に、ファイル名をすぐ取得する処理ができないか検討するためです。以下のコードは、ダウンロードディレクトリ内の最新ダウンロードファイル名を取得する例です。
class WebDriverModule(object):
def getLatestDownloadedFileName(self):
if len(os.listdir(downloadsFilePath)) == 0:
return None
return max(
[downloadsFilePath + f for f in os.listdir(downloadsFilePath)],
key=os.path.getctime
)
このコードでは、os
とmax(list, key)
を使用して、ダウンロード先内の全ファイルから「最新の日付のファイル」という条件で1ファイル取得します。
以上の手順により、PythonとSeleniumを使用してダウンロードしたファイル名を取得することができます。これらの手順を組み合わせることで、Webスクレイピングにおける自動ファイルダウンロードの課題を解決することができます。.