seleniumでshadow-root内の要素が取得できない

実現したいこと

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

1<selenium.webdriver.remote.webelement.WebElement (session="5bb371806a400f719200a778b9f35b11", element="8042e213-83cf-484d-b7d7-dbb21042780a")>

・サイト上に複数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

1<selenium.webdriver.remote.shadowroot.ShadowRoot (session="3f683cbe80e713d0e5ba24e65e175204", element="c855b814-394b-4216-88eb-4446206696ef")>

pythonのversionやPython実行環境を変更(JupyterLab→VSCode)したりもしたのですが、取得できない状況です。

補足情報(FW/ツールのバージョンなど)

・Python 3.11.2
・VSCode

コメントを投稿

0 コメント