Selenium + Chromium バージョン 96 以降での ShadowRoot の扱い

スクリプト
スポンサーリンク

Python の Selenium で ShadowRoot を扱っていたときにちょっとハマったので解決方法を紹介します.

スポンサーリンク

問題

従来,ShadowRootを解析する場合,下記の expand_shadow_element のような関数を用意して,Javascript 経由で element を取得していたと思います.ただ.これは,Chromium バージョン96 以降では動きません.

発生するエラーメッセージは下記のようなものです.

解決策

Seleniumが新たに用意した,shadow_root プロパティと find_element を使って,次のように書き換えると動くようになります.

Selenium ライブラリが,W3C WebDriver specification の Get Element Shadow Root に対応したことにより,Javascript を使う必要は無くなりました.また,find_element_by_css_selector は今後廃止予定なのでfind_element に置き換えています.

Selenium ライブラリの変更内容は,『[py] add support for shadow dom end points』が分かりやすいです.

参考文献

Shadow DOM in Selenium
https://titusfortner.com/2021/11/22/shadow-dom-selenium.html
Python 以外の言語での対応も含めて紹介されています.

コメント

  1. juner より:

    driver.find_element_by_css_selector(By.CSS_SELECTOR, "div.XXX") ではなく
    driver.find_element(By.CSS_SELECTOR, "div.XXX") ではないでしょうか?