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

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

新規登録して質問してみよう
ただいま回答率
85.47%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

Q&A

解決済

2回答

261閲覧

SeleniumをStreamlit Cloudで動作させる方法

trifle_gz

総合スコア1

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

0グッド

0クリップ

投稿2024/02/08 11:17

実現したいこと

Streamlit Cloud上でSeleniumのdriverを設定したいです。

発生している問題・分からないこと

下記を実行したときエラーが発生します。
driver = webdriver.Chrome(
service=ChromiumService(
ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()
)
)

エラーメッセージ

error

1Traceback: 2File "/home/adminuser/venv/lib/python3.11/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 535, in _run_script 3 exec(code, module.__dict__) 4File "/mount/src/driver_test.py", line 27, in <module> 5 driver = generate_driver() 6 ^^^^^^^^^^^^^^^^^ 7File "/mount/src/driver_test.py", line 20, in generate_driver 8 ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install() 9File "/home/adminuser/venv/lib/python3.11/site-packages/webdriver_manager/chrome.py", line 40, in install 10 driver_path = self._get_driver_binary_path(self.driver) 11 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 12File "/home/adminuser/venv/lib/python3.11/site-packages/webdriver_manager/core/manager.py", line 40, in _get_driver_binary_path 13 file = self._download_manager.download_file(driver.get_driver_download_url(os_type)) 14 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 15File "/home/adminuser/venv/lib/python3.11/site-packages/webdriver_manager/drivers/chrome.py", line 32, in get_driver_download_url 16 driver_version_to_download = self.get_driver_version_to_download() 17 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 18File "/home/adminuser/venv/lib/python3.11/site-packages/webdriver_manager/core/driver.py", line 48, in get_driver_version_to_download 19 return self.get_latest_release_version() 20 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 21File "/home/adminuser/venv/lib/python3.11/site-packages/webdriver_manager/drivers/chrome.py", line 64, in get_latest_release_version 22 determined_browser_version = ".".join(determined_browser_version.split(".")[:3]) 23 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

該当のソースコード

Python

1from selenium import webdriver 2from selenium.webdriver.chrome.options import Options 3from webdriver_manager.core.os_manager import ChromeType 4from webdriver_manager.chrome import ChromeDriverManager 5import streamlit as st 6from selenium.webdriver.chrome.service import Service as ChromiumService 7 8 9def generate_driver(): 10 options = Options() 11 options.add_argument("--headless") 12 options.add_argument( 13 "--no-sandbox" 14 ) 15 options.add_argument( 16 "--disable-dev-shm-usage" 17 ) 18 driver = webdriver.Chrome( 19 service=ChromiumService( 20 ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install() 21 ) 22 ) 23 return driver 24 25 26st.title("driver_test.py") 27driver = generate_driver() 28

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

以下サイトを参考にブラウザはchromiumを使用しました。
https://ohenziblog.com/streamlit_cloud_for_selenium/

Seleniumは4.17.2を使用。webdriver-managerの説明から該当箇所を以下のように変更しました。
selenium 4
driver = webdriver.Chrome(service=BraveService(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install()))
Selenium3も試しましたが、同じ個所でエラーが発生しました。
参考:https://pypi.org/project/webdriver-manager/

補足

Streamlit Cloudにてdeployしたアプリ上で実行しました。
Pythonは3.11です。
ライブラリのバージョンは以下の通りです。
Selenium==4.17.2
streamlit==1.30.0
webdriver-manager==4.0.1

またpackges.txtは下記の通りです。
chromium
chromium-driver

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

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

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

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

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

otn

2024/02/08 12:42

少なくともブラウザがChromeとかFirefox等なら、Selenium==4.17.2 なら、Selenium4.6からSelenium本体がChromedriver等を自動ダウンロードするようになってるので、webdriver_manageは不要ですが、Chromiumだと要るのしょうか? 「Chromeだと不要なのは知っているがChromiumだと要る」ということでなければ、使わないように修正してみましょう。 webdriver_manage自体は、古いSeleniumバージョンを使い続けている人向けにアップデートも続いているようですが、もしかすると、Selenium4.6以降でのテストはちゃんとやってないのかも。
otn

2024/02/08 12:54

あと、options にオプションを設定していますが、それを使わずに、 driver = webdriver.Chrome( してますね。オプション設定したいなら、 driver = webdriver.Chrome(options=options) です。
trifle_gz

2024/02/09 15:00

コメントありがとうございます。driver = webdriver.Chrome(options=options) を試したところ問題が解決しました! 見ていた情報と使っていたライブラリのバージョンが違うのがよくなかったようです。 optionsは質問用にコードをシンプルに書き直そうとしたときに抜け落ちていました。 ご指摘ありがとうございます。 ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答2

0

ベストアンサー

少なくともブラウザがChromeとかFirefox等なら、Selenium==4.17.2 なら、Selenium4.6からSelenium本体がChromedriver等を自動ダウンロードするようになってるので、webdriver_manageは不要です。

「Chromeだと不要なのは知っているがChromiumだと要る」ということでなければ、使わないように修正してみましょう。
webdriver_manage自体は、古いSeleniumバージョンを使い続けている人向けにアップデートも続いているようですが、もしかすると、Selenium4.6以降でのテストはちゃんとやってないのかも。

あと、options にオプションを設定していますが、それを使わずに、
driver = webdriver.Chrome(~~
してますね。これだとヘッドレス指定が無いので、ブラウザ画面を開こうとしますが、Cloud上だとディスプレイが無いのでは?
オプション設定を有効にするなら、webdriver_manage を使わないのと合わせると、
driver = webdriver.Chrome(options=options)
ですね。

投稿2024/02/09 16:45

otn

総合スコア84633

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

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

trifle_gz

2024/02/10 00:34

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

0

見た感じ、SeleniumのChromeドライバーを使用する際に発生しているっぽいです。
Streamlit Cloud上でSeleniumのChromeドライバーを設定する方法について説明します。

Streamlit Cloudでは、バックグラウンドで実行されるアプリケーションは、通常のローカルマシンとは異なる環境で実行されます。特に、Streamlit Cloudではヘッドレスブラウザー(ユーザーインターフェースを持たないブラウザー)を使用する必要があります。

簡単な手順をのせておきます。
1.Seleniumドライバーをインストールする。
2.ヘッドレスモードでChromeを実行する。
3.ドライバーを初期化し、適切なオプションを設定する。

from selenium import webdriver from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager import streamlit as st def generate_driver(): options = Options() options.add_argument("--headless") options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-gpu") # グラフィックスの無効化 driver = webdriver.Chrome( ChromeDriverManager().install(), options=options ) return driver st.title("driver_test.py") driver = generate_driver() driver.get("https://www.google.com") st.write(driver.title) driver.quit()

このコードでは、ChromeドライバーのインストールにChromeDriverManager()を使用しています。また、--disable-gpuオプションを追加することで、グラフィックス処理を無効化しています。これは、ヘッドレスモードでのChromeの安定性を向上させるためのものです。

このコードを実行すると、Streamlit Cloud上でSeleniumのChromeドライバーが設定され、指定したURL(ここではGoogle)にアクセスしてページのタイトルを表示すると思います。一度、お試しください

投稿2024/02/09 00:39

shoshinsha123

総合スコア213

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問