Closed14
Python Seleniumについて
ピン留めされたアイテム
調査した結果、作成した記事
Seleniumの仕様変更の対応
- Seleniumの仕様が変わっており、少し前の記事を参考にすると、エラー祭りになる。。。🥺
- こちらの記事が参考になります。
find_element_by_XXX系の新しい書き方
検索 | 旧記述 | 新記述 |
---|---|---|
id | .find_element_by_id("id") |
.find_element(By.ID, "id") |
name | .find_element_by_name("name") |
.find_element(By.NAME, "name") |
xpath | .find_element_by_xpath("xpath") |
.find_element(By.XPATH, "xpath") |
リンクのテキスト | .find_element_by_link_txt("link text") |
.find_element(By.LINK_TEXT, "link text") |
リンクのテキスト(部分一致) | .find_element_by_partial_link_text("partial link text") |
.find_element(By.PARTIAL_LINK_TEXT, "partial link text") |
タグ名 | .find_element_by_tag_name("tag name") |
.find_element(By.TAG_NAME, "tag name") |
クラス名 | .find_element_by_class_name("class name") |
.find_element(By.CLASS_NAME, "class name") |
CSSセレクタ | .find_element_by_css_selector("css selector") |
.find_element(By.CSS_SELECTOR, "css selector") |
Selenium Doc・チートシートなど
Google検索を実行する
Selenium を Web API (Flask・Docker環境) から Accessできるようにする。
- Web APIに搭載するか?それとも、別のコンテナで作成するか?
- Test自動化だったらDockerで、別コンテナで立ててもいいが、今回は、Webスクレイピング機能として、使いたいので、Web API内部に組み込みたい。。。
Chromedriverをpipコマンドでインストールすれば、Flask-APIの内部で動作するかな?- Containerは、別で立てた方が、Chromedriverのバージョン問題などにも悩まされずにすみそうなので、Dockerで別枠のSelenium Containerを作成する。
docker-selenium の GitHub
Debian ARM64、ARM/v7、および AMD64 用に構築された Selenium 用の Docker イメージ
Selenium の公式 Docker Image たち
seleniarm/standalone-chromium
Chromedriverをpipコマンドでインストールする方法
Selenium を local環境(M1 Mac)に構築した際に参照した内容
ヘッドレス Browser とは?
Docker で Selenium を動かす Ver. ChromeDriver
1. Docker Image を installする
docker pull seleniarm/standalone-chromium
2. Selenium Cotanier を実行する Ver. Chromium
docker run --rm -it -p 4444:4444 -p 5900:5900 -p 7900:7900 --shm-size 2g seleniarm/standalone-chromium:latest
- 4444, 5900, 7900 の3つのポートを使用します。
3. WebDriver を使ったテストは、 http://localhost:4444 を指定して実施します。
4. コンテナ内で何が起こっているかを確認するには、http://localhost:7900/?autoconnect=1&resize=scale&password=secretに移動します。
- Default の Password は、
secret
注意事項
- docker runブラウザを含む画像に対して実行する場合は、--shm-size=2gホストの共有メモリを使用するフラグを使用してください。
[ 参考・引用 ]
seleniarm/standalone-chromium Docker Image
Debian ARM64、ARM/v7、および AMD64 用に構築された Selenium 用の Docker イメージ
Docker Composeで、BackEnd-API Container と Selenium Cotanier を連携させる。
Selenium Docker の Driver info: driver.version: unknown エラー 解決方法
原因:M1 Mac などの ARMの影響
解決策:ARM環境の場合は、seleniarm の Docker Image を使用する
seleniarm/standalone-chromium
参考・引用
Response code 500. Message: unknown error: cannot create temp dir for user data dir エラーの状況と原因・解決策
1. 状況
- Seleniumのセッションを開始できなかった。
- ドライバー サービスとのセッションの作成中にエラーが発生しました。
- ユーザー データ ディレクトリの一時ディレクトリを作成できません。
2. エラー原因の推測
- Chrome Driver のバージョンが unknown になっている。
- おそらく、Chrome Driverと Chromeの互換性問題だと考えられる。
- または、Docker のメモリが足らないことによるエラーもある?
3. 解決策:Dockerのメモリ解放や、Arm対応(M1 Macの場合)
- M1 Mac 環境なので、それによるエラーの可能性が高い。。。
- だが、すでに、
seleniarm/standalone-chromium
を使っているのに、なぜ発生するのか?
- M1 Mac などの arm系だと動かない理由は、この記事でよく調査されている。
エラー内容
selenium.common.exceptions.SessionNotCreatedException:
Message: Could not start a new session.
Error while creating session with the driver service.
Stopping driver service: Could not start a new session.
Response code 500.
Message: unknown error: cannot create temp dir for user data dir
Error while creating session with the driver service.
Message: unknown error: cannot create temp dir for user data dir
Driver info: driver.version: unknown
翻訳
selenium.common.Exceptions.SessionNotCreatedException:
メッセージ: 新しいセッションを開始できませんでした。
ドライバー サービスとのセッションの作成中にエラーが発生しました。
ドライバー サービスを停止しています: 新しいセッションを開始できませんでした。
レスポンスコード500。
メッセージ: 不明なエラー: ユーザー データ ディレクトリの一時ディレクトリを作成できません
ドライバー サービスとのセッションの作成中にエラーが発生しました。
メッセージ: 不明なエラー: ユーザー データ ディレクトリの一時ディレクトリを作成できません
ドライバー情報:ドライバー.バージョン:不明
Dockerのメモリ解放について
-
以前、書いたDockerのメモリ解放系の記事
- https://zenn.dev/aiq_dev/articles/931a8f58f80359
-
docker system prune --volumes
でメモリ解放
-
こちらの記事では、メモリ制限をかけていたので、それはコメントアウトする。
docker-compose.yml
version: "3"
services:
# Selenium サーバを起動するコンテナ
selenium:
container_name: selenium-chrome
# 通常の環境では、以下のイメージを使います。
# image: selenium/standalone-chrome
# M1 Mac など ARM で動作する環境では、以下のイメージを使います。
image: seleniarm/standalone-chromium
ports:
# Selenium サーバに接続するポート
- "4444:4444"
# VNC で接続するポート
- "5900:5900"
# Selenium サーバのログを出力するポート
- "7900:7900"
# コンテナが使用するメモリの上限を設定 -> コメントアウト
# shm_size: "2gb"-> コメントアウト
# Web スクレイピングを実行するコンテナ
scraping-app:
container_name: scraping-app
build: ./app
volumes:
- ./app:/opt/app
tty: true
Chrome Driver バージョンエラー系の参考記事
Docker のディスク容量が足りない系の参考記事
chromedriver のバージョンを Chrome に自動的に合わせる方法
Chrome Driver 自動更新系エラー
このスクラップは2024/01/06にクローズされました