python selenium と edge webdriver.Edge(EdgeChromiumDriverManager().install()) のエラー
import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.common.by import By
class DemoFindElementByLinkText:
def locate_by_link_text(self):
# Edge WebDriverを初期化
driver = webdriver.Edge(EdgeChromiumDriverManager().install())
# URLを開く
driver.get("https://www.yatra.com/")
# 部分リンクテキストで要素を見つけてクリック
driver.find_element(By.PARTIAL_LINK_TEXT, "Yatra for Business").click()
# 4秒待機
time.sleep(4)
# ブラウザを閉じる
driver.quit()
# クラスをインスタンス化してメソッドを呼び出す
find_by_link_text = DemoFindElementByLinkText()
find_by_link_text.locate_by_link_text()
eclipseの pydevから上記のコードを実行したら
次のようなエラーが表示されました。
Traceback (most recent call last):
File "C:\03_w\eclipse_workspace_202412\selenium_check01\
selenium_017_linktest\#017_link_text_check.py",
line 29, in <module>
find_by_link_text.locate_by_link_text()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "C:\03_w\eclipse_workspace_202412\selenium_check01\
selenium_017_linktest\#017_link_text_check.py",
line 12, in locate_by_link_text
driver = webdriver.Edge(EdgeChromiumDriverManager().install())
File "C:\Users\user\AppData\Local\Programs\Python\
Python313\Lib\site-packages\selenium\webdriver\edge\
webdriver.py", line 45, in __init__
super().__init__(
~~~~~~~~~~~~~~~~^
browser_name=DesiredCapabilities.EDGE["browserName"],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
keep_alive=keep_alive,
^^^^^^^^^^^^^^^^^^^^^^
)
^
File "C:\Users\user\AppData\Local\Programs\Python\
Python313\Lib\site-packages\selenium\webdriver\
chromium\webdriver.py", line 50, in __init__
if finder.get_browser_path():
~~~~~~~~~~~~~~~~~~~~~~~^^
File "C:\Users\user\AppData\Local\Programs\Python\Python313\Lib\site-packages\selenium\webdriver\common\driver_finder.py", line 47, in get_browser_path
return self._binary_paths()["browser_path"]
~~~~~~~~~~~~~~~~~~^^
File "C:\Users\user\AppData\Local\Programs\Python\Python313\Lib\site-packages\selenium\webdriver\common\driver_finder.py", line 56, in _binary_paths
browser = self._options.capabilities["browserName"]
^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'capabilities'
このエラーの原因と、修正方法を提示していただけないでしょうか?
このエラーは、`webdriver_manager` と
`selenium` のバージョンが互換性がないか、
もしくは `EdgeChromiumDriverManager` の使用時に
適切な設定が不足していることが原因です。
以下に詳細と修正方法を説明します。
---
### **エラーの原因**
1. **`webdriver_manager` の仕様変更**
`webdriver_manager` の最近のバージョンでは、
WebDriverを取得する方法やその設定が変更される場合があります。
2. **Seleniumのバージョン不一致**
新しいSeleniumバージョン(4.x以降)では、
WebDriverの初期化やオプションの指定に違いがあるため、
古いコードがそのままでは動作しないことがあります。
3. **EdgeDriverのオプションの設定不足**
`webdriver.Edge` の初期化時に `options`
パラメーターを指定しないと、デフォルトの設定に問題が発生することがあります。
---
### **修正方法**
以下のコードを試してください。
```python
import time
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
class DemoFindElementByLinkText:
def locate_by_link_text(self):
# EdgeDriverのサービスを設定
service = Service(EdgeChromiumDriverManager().install())
# Edge WebDriverを初期化
driver = webdriver.Edge(service=service)
# URLを開く
driver.get("https://www.yatra.com/")
# 部分リンクテキストで要素を見つけてクリック
driver.find_element(By.PARTIAL_LINK_TEXT, "Yatra for Business").click()
# 4秒待機
time.sleep(4)
# ブラウザを閉じる
driver.quit()
# クラスをインスタンス化してメソッドを呼び出す
find_by_link_text = DemoFindElementByLinkText()
find_by_link_text.locate_by_link_text()
```
---
### **変更点の説明**
1. **`Service` の使用**
`webdriver.Edge` を初期化する際、
`EdgeChromiumDriverManager` から取得したパスを
`Service` に渡すことでドライバーの設定を明示的に指定しました。
```python
from selenium.webdriver.edge.service import Service
service = Service(EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=service)
```
2. **依存関係の確認**
必ず以下のバージョンがインストールされているか確認してください。
- `selenium`: 最新版(4.x以上を推奨)
- `webdriver_manager`: 最新版(3.x以上を推奨)
バージョンを確認するには、以下を実行します:
```bash
pip show selenium
pip show webdriver_manager
```
3. **`options` パラメータの省略**
デフォルトでブラウザオプションが適用されるため、
オプションの設定はこのケースでは不要です。
---
### **その他の注意点**
- エッジブラウザが正しくインストールされていることを確認してください。
インストールされていない場合、公式サイトからダウンロードしてください。
- 必要であれば、ブラウザのバージョンが
`EdgeChromiumDriverManager` でサポートされているか確認してください。
これでエラーが解消されるはずです。
コメント
コメントを投稿