python selenium と edge webdriver.Edge(EdgeChromiumDriverManager().install()) のエラー

 




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` でサポートされているか確認してください。



これでエラーが解消されるはずです。



コメント