前提・実現したいこと
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
ご回答、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/07 22:21