Chromeが使えないPCが存在した
今回のはこれが原因でFirefox利用になりました。
https://forest.watch.impress.co.jp/docs/news/1226294.html
ダウンロード処理の際にダイアログが出てきてしまって詰まった
ざっくりと調べたところ、result.set_preference("browser.helperApps.neverAsk.saveToDisk", mimetypes)
でしっかりとMIMEタイプを指定できれば良いようです。今回ダウンロードしたいファイルはtxtなので、text/plain
でいいと思ったのですがそれではうまくいかない....
MIMEタイプを調べる方法
解決にはこのページが役に立ちました。
https://stackoverflow.com/questions/39519518/python-selenium-firefox-neverask-savetodisk-when-downloading-from-blob-url
実際は上記のサイトとは微妙に異なっていました。
バージョンの関係なのか、mimetypes.rdf
ではなくhandlers.json
の中にありました。
"mimeTypes"
の中に"application/x-download"
ってのがあったのでうまく解決しました。
解決したコード(関数)
ある程度MIMEタイプの種類をそろえたので、結構対応幅はあるのではないのでしょうか。
# 一時的なダウンロードフォルダ。相対パスで指定するのがうまくいかなかったために暫定処理として
DOWNLOAD_DIR = os.environ["USERPROFILE"] + r'\Desktop'
def open_browser(headless=True, width=0, height=0):
print('\nブラウザを開く処理の開始')
options = webdriver.FirefoxOptions()
if(headless):
options.add_argument('-headless')
options.add_argument('--ignore-certificate-errors')
profile = profile_for_download()
driver = webdriver.Firefox(options=options, firefox_profile=profile)
if (width > 0 and height > 0):
driver.set_window_size(width, height)
return driver
def profile_for_download():
mimetypes = mimetypes_for_download()
result = webdriver.FirefoxProfile()
result.set_preference("browser.download.folderList", 2)
result.set_preference("browser.download.dir", DOWNLOAD_DIR)
result.set_preference(
"browser.helperApps.neverAsk.saveToDisk", mimetypes)
return result
def mimetypes_for_download():
# ダウンロードのダイアログが出た場合はここを調整する。
# 多分、プロファイルのフォルダのhandlers.jsonを見ればわかる。
# プロファイルのフォルダは、設定 -> ヘルプ→ -> ラブルシューティング -> プロファイルフォルダーでわかる。
result = ["text/xml","text/csv","text/plain",
"image/png","image/jpeg","image/gif","audio/mpeg",
"video/mpeg","video.mp4",
"application/pdf","application/zip",
"application/force-download","application/octet-stream","application/x-download"]
return ",".join(result)