in packages/synthetics-sdk-broken-links/src/navigation_func.ts [47:91]
export async function retrieveLinksFromPage(
page: Page,
query_selector_all: string,
get_attributes: string[]
): Promise<LinkIntermediate[]> {
const origin_uri = await page.url();
return await page.evaluate(
(
query_selector_all: string,
get_attributes: string[],
origin_uri: string
) => {
const link_elements: HTMLElement[] = Array.from(
document.querySelectorAll(query_selector_all)
);
return link_elements.flatMap((link_element: HTMLElement) => {
const anchor_text = link_element?.textContent?.trim() ?? '';
return get_attributes
.map((attr) => (link_element.getAttribute(attr) || '').toString())
.filter((value) => {
const qualifed_url = new URL(value, origin_uri).href;
return (
value &&
(qualifed_url.startsWith('http') ||
qualifed_url.startsWith('file:'))
);
})
.map((value) => {
const qualifed_url = value.startsWith('file:')
? value
: new URL(value, origin_uri).href;
return {
target_uri: qualifed_url,
anchor_text: anchor_text,
html_element: link_element.tagName.toLocaleLowerCase(),
};
});
});
},
query_selector_all,
get_attributes,
origin_uri
);
}