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')
となります。
試してみてください。
コメントを書く