【Python・Selenium】shadow-rootを開く

【Python・Selenium】shadow-rootを開く

Seleniumで画面操作していると下記のようなshadow-rootというものが出てきてDomが取得できないことはありませんか?

#shadow-root (open)
  <div id="p1">test</div>
  <div id="p2">test2</div>

shadow-rootを開いて上記のdivなどのようなshadow-root配下のdomを取得する方法を記載します。

方法

1. shadow-root要素を取得する関数を定義

以下のような関数を定義し、shadow-root要素を中身と共に取得します。

def getShadowRootElement(element):
    shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
    return shadow_root

2. 処理内で1で作成した関数を呼び出す

例えば以下のような関しです。今回はid名で要素を取得するようにしていますが、class、xpathで取得などご自由に変更してください

element = driver.find_element_by_id('対象要素のid名')
shadow_root = getShadowRootElement(element)

3. shadow_root配下の要素を取得する

あとは、他の要素を取得するときの同様に処理します。

例えば、冒頭の例のshadow-rootの一つ目のdiv要素を取得する場合は

element = shadow_root.find_element_by_id('p1')

となります。

試してみてください。

Pythonカテゴリの最新記事