I would like to get plain HTML with shadowRoot elements extracted. There is a lot of shadowRoot elements on a website and are deeply nested.
I use that piece of code to achieve it. But it only extracts some of the elements
const getShadowDomHtml = (shadowRoot) => {
let shadowHTML = '';
for (let el of shadowRoot.childNodes) {
shadowHTML += el.nodeValue || el.outerHTML;
}
return shadowHTML;
};
const replaceShadowDomsWithHtml = (rootElement) => {
for (let el of rootElement.querySelectorAll('*')) {
if (el.shadowRoot) {
replaceShadowDomsWithHtml(el.shadowRoot);
el.innerHTML += getShadowDomHtml(el.shadowRoot);
}
}
};
.
> replaceShadowDomsWithHtml(document.body);
.
> document.body.innerHTML