実現したいこと
seleniumで該当のshadow-root内の要素を取得したい
前提
pythonでseleniumを使ったスクレイピングを練習中です。
メルカリのサイトでshadow-root内の要素を取得しようとしたところ、エラーが発生してしまいます。
【メルカリのリンク】
https://jp.mercari.com/
情報提供の不足等、至らぬ点がございましたら遠慮なくお申し付けください。
何卒よろしくお願いいたします。
発生している問題・エラーメッセージ
selenium.common.exceptions.NoSuchShadowRootException: Message: no such shadow root
該当のソースコード
python
1from selenium import webdriver 2from selenium.webdriver.common.by import By 3 4ChromeOptions = webdriver.ChromeOptions()5ChromeOptions.add_experimental_option('excludeSwitches', ['enable-logging'])6 7#ブラウザを立ち上げ、MercariのURLを検索8browser = webdriver.Chrome('chromedriver.exe', options=ChromeOptions)9 10#url取得11url = "https://jp.mercari.com/"12browser.get(url)13 14#shadow-rootの要素取得(エラーになる)15src_shadow = browser.find_element(By.CSS_SELECTOR,'#___gatsby > div > div > div > header > mer-navigation-top > mer-autocomplete > div > mer-search-input').shadow_root 16print(src_shadow)
試したこと
.shadow_rootを記載しなければ、エラーなく要素が取得できるのでshadow-rootの直前のパスまでは取得出来ている状態かと思います。
python
1#shadow-rootの直前までの要素取得2src_shadow = browser.find_element(By.CSS_SELECTOR,'#___gatsby > div > div > div > header > mer-navigation-top > mer-autocomplete > div > mer-search-input')3print(src_shadow)
→WebElementが取得できる
message
・サイト上に複数shadow-rootがあるのですが、同様のコードの記載方法で取得できるものもあります。
python
1#shadow-rootの要素取得(取得可能)2src_shadow = browser.find_element(By.CSS_SELECTOR,'#___gatsby > div > div > div > mer-button').shadow_root 3print(src_shadow)
→ShadowRootが取得できる
message
pythonのversionやPython実行環境を変更(JupyterLab→VSCode)したりもしたのですが、取得できない状況です。
補足情報(FW/ツールのバージョンなど)
・Python 3.11.2
・VSCode
0 コメント