96075


下記のようなエラーが発生してmsedgedriverを使うことが出来ません。chromedriverをインストールして同じようにしてみたのですが、同じエラーが発生します。driverとedgeのバージョンは同じです。わかる方いらしたら何卒宜しくお願い致します。

**エラーメッセージ:**

[code]

    Traceback (most recent call last):
      File "C:\Users\uc100\Programing\Python\Python311\Lib\site-packages\selenium\webdriver\common\driver_finder.py", line 38, in get_path
        path = SeleniumManager().driver_location(options) if path is None else path
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\uc100\Programing\Python\Python311\Lib\site-packages\selenium\webdriver\common\selenium_manager.py", line 71, in driver_location
        browser = options.capabilities["browserName"]
                  ^^^^^^^^^^^^^^^^^^^^
    AttributeError: 'str' object has no attribute 'capabilities'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "c:\Users\uc100\Programing\Python\Codingspace\everything\seletag1.py", line 5, in <module>
        driver = webdriver.Edge('./msedgedriver.exe')
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\uc100\Programing\Python\Python311\Lib\site-packages\selenium\webdriver\edge\webdriver.py", line 45, in __init__
        super().__init__(
      File "C:\Users\uc100\Programing\Python\Python311\Lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 51, in __init__
        self.service.path = DriverFinder.get_path(self.service, options)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\uc100\Programing\Python\Python311\Lib\site-packages\selenium\webdriver\common\driver_finder.py", line 40, in get_path       
        msg = f"Unable to obtain driver for {options.capabilities['browserName']} using Selenium Manager."
                                             ^^^^^^^^^^^^^^^^^^^^
    AttributeError: 'str' object has no attribute 'capabilities'
    
[/code]

**実行したコード:**

[code]

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    
    driver = webdriver.Edge('./msedgedriver.exe')  
    
    driver.get('https://bing.com')
    
    element = driver.find_element(By.ID,'sb_form_q')
    element.send_keys('WebDriver')
    element.submit()
    
    time.sleep(5)
    driver.quit()
    
[/code]


CC BY-SA 4.0
2023-08-29T08:31:29.273
96072
2023-10-07T02:22:02.873
2023-08-29T08:36:18.930
3060
53201
question
python python3 selenium-webdriver microsoft-edge
スクレイピングのためにmsedgedriverを使用したが、エラーが発生する


状況をもう少し詳細に説明すると、以下の書き方は selenium 4.0.0 版で非推奨になり、4.10.0 版で廃止されたということです。

[code]

    driver = webdriver.Edge('./msedgedriver.exe')  
    
[/code]

こんなIssueに(ChromeDriverを題材にした)類似の情報があります。  
[[ Bug]: selenium v4.10.0 removes executable_path from Chrome object
#12176](https://github.com/SeleniumHQ/selenium/issues/12176)  
[Selenium 4.10.0
Released!](https://www.selenium.dev/blog/2023/selenium-4-10-0-released/)

>   * Python - removal of several sections of deprecated code.
>     * Most of them were arguments that can be set in the Options classes
> (browser values) or Service classes (browser driver values).
>     * They have been deprecated since the first Selenium 4 release
>

[Python - Upgrade to Selenium
4](https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/#python-1)

> executable_path has been deprecated, please pass in a Service object  
>  In Selenium 4, you’ll need to set the driver’s executable_path from a
> Service object to prevent deprecation warnings. (Or don’t set the path and
> instead make sure that the driver you need is on the System PATH.)  
>  Before
[code]

>     from selenium import webdriver
>     options = webdriver.ChromeOptions()
>     driver = webdriver.Chrome(
>         executable_path=CHROMEDRIVER_PATH,
>         options=options
>     )
>  
[/code]

>
> After
[code]

>     from selenium import webdriver
>     from selenium.webdriver.chrome.service import Service as ChromeService
>     options = webdriver.ChromeOptions()
>     service = ChromeService(executable_path=CHROMEDRIVER_PATH)
>     driver = webdriver.Chrome(service=service, options=options)
>  
[/code]

質問の場合はパラメータ名'executable_path='の指定も無かったので質問記事のようなエラーになりましたが、該当の行をこんな風に指定していたら：

[code]

    driver = webdriver.Edge(executable_path='./msedgedriver.exe')
    
[/code]

こんなエラーになったはずです。

[code]

    Traceback (most recent call last):
      File "c:\Users\uc100\Programing\Python\Codingspace\everything\seletag1.py", line 5, in <module>
        driver = webdriver.Edge(executable_path='./msedgedriver.exe')
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: WebDriver.__init__() got an unexpected keyword argument 'executable_path'
    
[/code]

なので上記ChromeDriverの情報と質問の内容を合わせてEdgeDriverに適合させると以下のようになるでしょう。

[code]

    from selenium import webdriver
    from selenium.webdriver.edge.service import Service as EdgeService
    options = webdriver.EdgeOptions()
    service = EdgeService(executable_path='./msedgedriver.exe')
    driver = webdriver.Edge(service=service,options=options)
    
[/code]

それから、質問のソースコードはこちらMicrosoftの記事内容を元にしていると思われますが、これに限らずどんな記事でも最新の版数・状況を反映したものとは限らないので広く情報を集めるように注意してください。  
[Microsoft Edge を自動化する](https://learn.microsoft.com/ja-jp/microsoft-
edge/webdriver-chromium/?tabs=python#automate-microsoft-edge)

ただ、同じ記事の直後の記述では対応しているようなので、ちょっとチグハグですが。  
[Microsoft Edge WebDriver サービスを管理および構成する](https://learn.microsoft.com/ja-
jp/microsoft-edge/webdriver-chromium/?tabs=python#manage-and-configure-the-
microsoft-edge-webdriver-service)  
[Microsoft Edge オプションを構成する](https://learn.microsoft.com/ja-jp/microsoft-
edge/webdriver-chromium/?tabs=python#configure-microsoft-edge-options)

他にはコメントでも紹介しましたが、[webdriver-manager -
PyPI](https://pypi.org/project/webdriver-
manager/)を使うとブラウザと対応するWebDriverの版数を簡単に合わせてくれるので便利です。

>
[code]

>     # selenium 4
>     from selenium import webdriver
>     from selenium.webdriver.edge.service import Service as EdgeService
>     from webdriver_manager.microsoft import EdgeChromiumDriverManager
>  
>     driver =
> webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))
>  
[/code]

そして今の所どのやり方をしても以下のようなエラーメッセージが表示されますが、処理は継続出来るので実際に何か止まってしまったり結果が異常になるような現象に遭遇するまでは取り敢えず無視して使用を続けても良いと思われます。

[code]

    [25012:13632:0830/140503.077:ERROR:chrome_browser_cloud_management_controller.cc(163)] Cloud management controller initialization aborted as CBCM is not enabled.
    [25012:13632:0830/140503.103:ERROR:assistance_home_client.cc(32)] File path C:\WINDOWS\SystemTemp\scoped_dir20584_1571943763\Default
    
    DevTools listening on ws://127.0.0.1:57583/devtools/browser/4882788b-64b1-48f0-b0db-19befce5bf47
    
[/code]

気になるならこちら
[MicrosoftEdge/EdgeWebDriver/Issues](https://github.com/MicrosoftEdge/EdgeWebDriver/issues?q=)
で報告されたIssuesの中を調べるか、無さそうならその`Issues`に新規に質問してみてください。

* * *

質問者さんはその後ここを訪れていないようですが、検索を続けてこんな記事を見つけました。  
[Selenium Edge Browser not
launching](https://stackoverflow.com/q/76017807/9014308)

解決マークは無く、かつ最初の回答に追記されたであろう内容がChromeDriver向けの例になっていますが、これをEdgeDriverに適用すると`ERROR`メッセージの2行が表示されなくなりました。  
ついでに`DevTools listening
on`で始まる行も表示されなくなったので、変更内容からするとまとめて何処かのログデータ(ファイル?)にリダイレクトされただけかもしれません。

webdriver-managerを使う回答に適用すると、`driver`オブジェクトを作成する1行を以下の3行に置き換えます。

[code]

    options = webdriver.EdgeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()),options=options)
    
[/code]


CC BY-SA 4.0
2023-08-30T05:27:11.000
96075
2023-10-07T02:22:02.873
2023-10-07T02:22:02.873
26370
26370
96072
answer