35 lines
2.1 KiB
JavaScript
35 lines
2.1 KiB
JavaScript
import { browser } from './browser.mjs';
|
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
const out = new URL('../evidence/', import.meta.url);
|
|
await mkdir(out, {recursive: true});
|
|
const b = await browser();
|
|
const results = [];
|
|
try {
|
|
for (const [name, url] of [['t3','https://t3.codes/'], ['buzz','https://buzz.xyz/']]) {
|
|
const entry = {name, url, observedAt: new Date().toISOString()};
|
|
try {
|
|
await b.viewport(1440, 1100);
|
|
await b.navigate(url);
|
|
// Allow the reference sites' entrance animation to finish before capture.
|
|
await new Promise(resolve => setTimeout(resolve, 4000));
|
|
entry.desktop = await b.evaluate(`({title:document.title, url:location.href,
|
|
headings:[...document.querySelectorAll('h1,h2,h3')].map(x=>x.textContent.trim()).slice(0,25),
|
|
controls:[...document.querySelectorAll('button,a,input')].map(x=>({tag:x.tagName,text:(x.textContent||x.getAttribute('aria-label')||x.placeholder||'').trim().slice(0,100),href:x.getAttribute('href')})).filter(x=>x.text).slice(0,65),
|
|
body:{font:getComputedStyle(document.body).fontFamily,bg:getComputedStyle(document.body).backgroundColor,color:getComputedStyle(document.body).color},
|
|
text:document.body.innerText.slice(0,6500)})`);
|
|
await b.screenshot(new URL(`${name}-desktop.png`, out));
|
|
await b.evaluate('window.scrollTo(0, 1500)');
|
|
await new Promise(resolve => setTimeout(resolve, 700));
|
|
await b.screenshot(new URL(`${name}-details.png`, out));
|
|
await b.evaluate('window.scrollTo(0, 0)');
|
|
await b.viewport(390, 844);
|
|
await new Promise(resolve => setTimeout(resolve, 700));
|
|
await b.screenshot(new URL(`${name}-mobile.png`, out));
|
|
entry.mobile = await b.evaluate('({width:innerWidth,scrollWidth:document.documentElement.scrollWidth})');
|
|
} catch(error) {entry.error = error.message;}
|
|
results.push(entry);
|
|
}
|
|
} finally {await b.close();}
|
|
await writeFile(new URL('references.json', out), JSON.stringify(results, null, 2));
|
|
console.log(results.map(x=>({name:x.name,title:x.desktop?.title,error:x.error,mobile:x.mobile})));
|