diff --git a/netlify-screenshot.png b/netlify-screenshot.png new file mode 100644 index 0000000..00f69b3 Binary files /dev/null and b/netlify-screenshot.png differ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..887c2e9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,57 @@ +{ + "name": "graphene-ecommerce-example", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "graphene-ecommerce-example", + "dependencies": { + "playwright": "^1.56.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/playwright": { + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.0.tgz", + "integrity": "sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.56.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.0.tgz", + "integrity": "sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/package.json b/package.json index 3fc9df1..540d3c0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "graphene-ecommerce-example", "dependencies": { + "playwright": "^1.56.0" }, "graphene": { "dialect": "bigquery" diff --git a/screenshot.js b/screenshot.js new file mode 100644 index 0000000..3ada973 --- /dev/null +++ b/screenshot.js @@ -0,0 +1,45 @@ +const { chromium } = require('playwright'); + +async function takeScreenshot() { + const browser = await chromium.launch(); + const page = await browser.newPage(); + + // Navigate to netlify.com + await page.goto('https://netlify.com'); + + // Wait for the page to load + await page.waitForLoadState('domcontentloaded'); + + // Take screenshot + await page.screenshot({ path: 'netlify-screenshot.png', fullPage: true }); + + // Extract page content for analysis + const content = { + title: await page.title(), + headings: await page.evaluate(() => { + const h1s = Array.from(document.querySelectorAll('h1')).map(h => h.textContent.trim()); + const h2s = Array.from(document.querySelectorAll('h2')).map(h => h.textContent.trim()); + const h3s = Array.from(document.querySelectorAll('h3')).map(h => h.textContent.trim()); + return { h1: h1s, h2: h2s, h3: h3s }; + }), + mainText: await page.evaluate(() => { + // Get text from main content areas + const main = document.querySelector('main') || document.body; + const paragraphs = Array.from(main.querySelectorAll('p')).map(p => p.textContent.trim()).filter(text => text.length > 50); + return paragraphs.slice(0, 10); // First 10 substantial paragraphs + }), + navigation: await page.evaluate(() => { + const navItems = Array.from(document.querySelectorAll('nav a, header a')).map(a => a.textContent.trim()).filter(text => text.length > 0); + return [...new Set(navItems)]; // Remove duplicates + }) + }; + + console.log('Screenshot taken: netlify-screenshot.png'); + console.log('Page analysis:'); + console.log(JSON.stringify(content, null, 2)); + + await browser.close(); + return content; +} + +takeScreenshot().catch(console.error); \ No newline at end of file