puppeteer-shadow-selector
Version:
Select elements in Shadow DOM
29 lines (28 loc) • 1.19 kB
JavaScript
;
exports.__esModule = true;
exports.$ = void 0;
var logical_not_1 = require("logical-not");
var selector_1 = require("./selector");
function $(page, selector) {
var parsedSelector = selector_1.parse(selector);
if (logical_not_1.not(parsedSelector))
return page.$(selector);
return page.waitForSelector(parsedSelector.mainSelector).then(function () {
return page
.evaluateHandle(function (selectorSource) {
return query(JSON.parse(selectorSource), document);
function query(selector, context) {
var _a;
var shadowRoot = (_a = context.querySelector(selector.mainSelector)) === null || _a === void 0 ? void 0 : _a.shadowRoot;
if (!shadowRoot)
return null;
if (typeof selector.shadowDOMSelector === "string")
return shadowRoot.querySelector(selector.shadowDOMSelector);
else
return query(selector.shadowDOMSelector, shadowRoot);
}
}, JSON.stringify(parsedSelector))
.then(function (source) { return source.asElement(); });
});
}
exports.$ = $;