From b7b2a915aebe32ff7e35ed67a4c9018bfdd0ae8b Mon Sep 17 00:00:00 2001 From: SmAsHeD <6071159+smashedr@users.noreply.github.com> Date: Sat, 6 Jul 2024 16:21:54 -0700 Subject: [PATCH] Finish shadowRoot Extraction (#87) * Finish shadowRoot Extraction * Add shadowRoot Test --- src/js/extract.js | 31 +++++++++++++++++-------------- tests/test.mjs | 25 +++++++++++++++++++++---- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/js/extract.js b/src/js/extract.js index 4765769..8bc9ad6 100644 --- a/src/js/extract.js +++ b/src/js/extract.js @@ -60,10 +60,10 @@ function extractAllLinks() { * @return {Array} */ function findLinks(root) { - console.debug('findLinks:', root) + // console.debug('findLinks:', root) const links = [] if (root.querySelectorAll) { - root.querySelectorAll('a').forEach((el) => { + root.querySelectorAll('a, area').forEach((el) => { pushElement(links, el) }) } @@ -95,9 +95,10 @@ function extractSelection() { if (ancestor.nodeName === '#text') { continue } - ancestor.querySelectorAll('a').forEach((element) => { - if (selection.containsNode(element, true)) { - pushElement(links, element) + ancestor.querySelectorAll('a, area').forEach((el) => { + if (selection.containsNode(el, true)) { + // console.debug('el:', el) + pushElement(links, el) } }) } @@ -114,16 +115,18 @@ function extractSelection() { function pushElement(array, element) { // console.debug('element:', element) try { - const data = { - href: decodeURI(element.href), - text: element.textContent?.trim(), - title: element.title, - label: element.ariaLabel || '', - rel: element.rel, - target: element.target, - origin: element.origin, + if (element.href) { + const data = { + href: decodeURI(element.href), + text: element.textContent?.trim(), + title: element.title, + label: element.ariaLabel || '', + rel: element.rel, + target: element.target, + origin: element.origin, + } + array.push(data) } - array.push(data) } catch (e) { console.log(e) } diff --git a/tests/test.mjs b/tests/test.mjs index 12390cb..3d86ba2 100644 --- a/tests/test.mjs +++ b/tests/test.mjs @@ -70,14 +70,31 @@ async function screenshot(name) { // Links await worker.evaluate('chrome.action.openPopup();') - let popupPage = await getPage(browser, 'popup.html', true) - console.log('popupPage:', popupPage) - await popupPage.locator('a[data-filter=""]').click() + let popup1 = await getPage(browser, 'popup.html', true) + console.log('popup1:', popup1) + await popup1.locator('a[data-filter=""]').click() page = await getPage(browser, 'links.html', true, '768x920') console.log('page:', page) await page.waitForNetworkIdle() - await screenshot('links') + await screenshot('link-extractor') + + // Page + await page.goto('https://archive.org/') + page.on('console', (msg) => console.log(`console: page:`, msg.text())) + await page.bringToFront() + await page.waitForNetworkIdle() + + // Links + await worker.evaluate('chrome.action.openPopup();') + let popup2 = await getPage(browser, 'popup.html', true) + console.log('popup2:', popup2) + await popup2.locator('a[data-filter=""]').click() + + page = await getPage(browser, 'links.html', true, '768x920') + console.log('page:', page) + await page.waitForNetworkIdle() + await screenshot('archive.org') await browser.close() })()