[英]How to edit #shadow-root (user-agent) value in selenium with Python
[英]How to read text that is under #shadow-root (user-agent)
您可以使用driver.execute_script
注入返回 ShadowRoot 的 JavaScript 代碼,然后使用find_element
獲取您正在尋找的影子根的子元素。
input_shadow = driver.execute_script('''return document.querySelector("$1").shadowRoot''')
div_text = inputShadow.find_element_by_tag_name("div").text
$1 - Your element's identifier or selector
。
如果您熱衷於使用 xpath 查找元素
input_shadow = driver.execute_script('''return $x(\"//*/p-calendar/span/input\")[0]''')
div_text = inputShadow.find_element_by_tag_name("div").text
根據@hayatoito
(Shadow DOM 的創建者)的評論:
引入封閉影子樹的最初動機是
"Never allow an access to a node in a closed shadow tree, via any APIs, from outside"
,AFAIK。 像這樣,我們無法訪問 Blink 中<video>
元素中使用的內部隱藏陰影樹中的節點。
其實我就是這樣設計了一個封閉的影子樹的。 如果有一種方法可以訪問封閉陰影樹中的節點,則應將其視為規范的錯誤。
我認為擁有一個 API 來允許在 Chrome 應用程序或擴展程序層中進行訪問是完全可以的。 但是,對於普通的網絡應用程序,我認為當前的協議是
"Never allow it"
。
如果我們允許,這意味着我們不需要封閉的影子樹。 我認為只要有一棵開放的影子樹就足夠了。
Furhter @Supersharp
在他自己的回答下面的評論中,在討論中如何使用 JavaScript 獲取用戶代理影子根中的元素? 提到:
#shadow-root (user-agent)
是瀏覽器供應商的本地實現,因此它們沒有記錄並且永遠無法訪問。 根據規范,只有開放的 Shadow DOM
近日,@AutomatedTester [David Burns,Mozilla Corporation 首席培根官]發起了一場關於WebDriver - Web 組件的可測試性的討論
目前, Selenium 團隊開放接受相同的拉取請求。
您可以在以下位置找到一些相關的詳細討論:
在這里您可以找到有關如何使用 selenium 自動化 shadow DOM 元素的相關討論?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.