all
I tried to access an existing chrome instant.
First, I opened chrome from console:
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:SeleniumChromeProfile"
Then I input url and directed to web page
In my code, I created dirver and attached to the existing chrome:
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
service = Service("C:\chromedriver.exe")
driver = webdriver.Chrome(service=service, options=chrome_options)
Then I got shadow_root:
shadow_host = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "#shadow_host"))
)
shadow_root = driver.find_element(By.CSS_SELECTOR, "#shadow_host").shadow_root
print(shadow_root is None)
So far, everything is ok, the output is False, I got a not null shadow_root.
Then I tried to get element via shadow_root:
chartlist = shadow_root.find_element(By.CLASS_NAME, "chart_wrapper")
print(len(chartlist ))
I got error like below:
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector
from javascript error: {"status":10,"value":"stale element not found in the current frame"}
(Session info: chrome=127.0.6533.120); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#invalid-selector-exception
And I also tried to get element via javascript:
shadow_root = driver.execute_script("return arguments[0].shadowRoot", shadow_host)
chart_list = driver.execute_script('return arguments[0].querySelector('div[class="chart_wrapper"]')',shadow_root )
But got the same error!
But I tried to get innerHTML like below:
content = driver.execute_script("""
var shadowHost = arguments[0];
var shadowRoot = shadowHost.shadowRoot;
return shadowRoot.innerHTML;
""", shadow_host)
print("Shadow root content:", content)
This time, I got the html text!
And I tried to get element again:
eles = driver.execute_script("""
var shadowHost = arguments[0];
var shadowRoot = shadowHost.shadowRoot;
var eles = shadowRoot.querySelector('div[class="chart_wrapper"]')'
return eles ;
""", shadow_host)
I got the same error again!
Now it seemed I can get the html text but can’t get element in shadowRoot!
Is there any way to access shadow_root element on an existing page via selenium?