質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

1580閲覧

selenium で ブラウザのデフォルトダウンロード先をS3にする方法

ak_suzuki

総合スコア194

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2021/05/07 07:52

編集2021/05/07 22:20

前提・実現したいこと

seleniumを使ったブラウザ自動化プログラムをherokuにデプロイしています。

seleniumによる操作で、ダウンロードボタンをクリックする、というものがあります。

herokuではローカル保存が出来ないので、ダウンロード先をAWS S3 にしたいと思っていますが、その方法がわかりませんのでこちらで質問させていただきます。

このダウンロード以外の挙動はすべて想定通り動いています。

なお、AWSにおいては、次のように設定しています。
・パブリックアクセスをすべて ブロック
・Cross-Origin Resource Sharing (CORS)には以下の記述をしています。

JSON

1[ 2 { 3 "AllowedHeaders": [ 4 "*" 5 ], 6 "AllowedMethods": [ 7 "PUT", 8 "POST", 9 "GET" 10 ], 11 "AllowedOrigins": [ 12 "*" 13 ], 14 "ExposeHeaders": [] 15 } 16]

参考サイト heroku Python での S3 へのファイルの直接アップロード

該当のソースコードとやってみたこと

python

1def launch_browserHeroku(url): 2 CHROME_DRIVER_PATH = '/app/.chromedriver/bin/chromedriver' 3 4 # もともとは↓のように記述しています。 5 # DOWNLOAD_DIR = '/app/tmp' 6 7 # このようにやってみましたがNGでした ↓↓↓↓↓ 8 AWS_ACCESS_KEY = "xxxxxxx" 9 AWS_SECRET_KEY = "xxxxxxx" 10 11 fs = s3fs.S3FileSystem(key=AWS_ACCESS_KEY, secret=AWS_SECRET_KEY) 12 13 DOWNLOAD_DIR = fs.ls('/') # ダメだったパターン1 =>fs.lsはリストを返すのでNG 14 DOWNLOAD_DIR = 's3://xxxxx/' # ダメだったパターン2 => s3://xx を参照できずにNG 15 # このようにやってみましたがNGでした ↑↑↑↑↑ 16 17 if not os.path.exists(DOWNLOAD_DIR): 18 os.mkdir(DOWNLOAD_DIR) 19 20 options = Options() 21 if CHROME_DRIVER_PATH: 22 options.binary_location = '/app/.apt/usr/bin/google-chrome' 23 24 options.add_argument('--headless') 25 options.add_argument('--disable-gpu') 26 options.add_argument('--no-sandbox') 27 options.add_argument('--window-size=5760,4320') 28 options.add_argument('start-maximized') 29 options.add_argument('--disable-dev-shm-usage') 30 31 prefs = { 32 'download.default_directory': DOWNLOAD_DIR, 33 'download.prompt_for_download': False, 34 } 35 options.add_experimental_option('prefs', prefs) 36 37 browser = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH, options=options) 38 browser.command_executor._commands['send_command'] = ('POST', '/session/$sessionId/chromium/send_command') 39 params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': DOWNLOAD_DIR}} 40 browser.execute('send_command', params) 41 42 browser.implicitly_wait(10) 43 browser.get(url) 44 45 return browser

AWSの認証が取れていなのだろうと検討はつくのですが、どうしたらAWSの認証が通り、指定したS3バケットにダウンロード先を変更できるようになるのか分かりませんでした。

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

python: 3.8.6
selenium: 3.141.0
chromedriver-binary: 90.0.4430.24

ご回答、どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ダウンロード先を直接S3にするのはそもそも無理でしょう。
結局heroku上に一度ダウンロードし、そのダウンロードしたものをS3にアップする処理を入れる必要があるのでそれを実装してください。
参考サイトでやっているのは、フォームでアップロードされたものの保存先をS3にする方法であって、ダウンロードされたものの保存先をS3にする方法ではありません。普通のストレージではないのでそんな事はできないと思います。(見かけの上でそれに近い形にはできるかもしれませんが)

記載されている実装内容を素直に読み解くと、S3上の/という名前のバケットの配下にあるファイルを表示させ、それをDOWNLOAD_DIRに格納して渡そうとしています。
/という名前のバケットを参照しようとしても多分そんなバケットはないですし権限云々以前にまあエラーになるでしょう。

何も言わずにs3fsというライブラリ(※)を使っていますが、おそらく/というバケットを参照しようとして使っているのではないとは思いますのでまず使い方を確認してください。
S3Fs
※通常S3FSで想像するものはS3をマウントするツールですが、それとは別物でPython製のboto3をラップしたS3を操作するためのライブラリ)

投稿2021/05/07 09:05

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ak_suzuki

2021/05/07 22:21

ありがとうございます。そもそも無理なんですね。そうすると対策方法を根本から見直す必要がありますね。良い気づきをいただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問