Eerste upload

This commit is contained in:
2026-05-09 08:33:11 +02:00
parent c755e10a77
commit 8435e62e9a
838 changed files with 174200 additions and 0 deletions
+155
View File
@@ -0,0 +1,155 @@
import { chromium } from "playwright";
import fs from "node:fs/promises";
import path from "node:path";
const targetUrl =
"https://create.onlineacademy.nl/8602e048-d7ee-4764-aafb-43412d0f65f3/edit?idsVersion=6";
const email = process.env.OA_EMAIL;
const password = process.env.OA_PASSWORD;
if (!email || !password) {
throw new Error("Set OA_EMAIL and OA_PASSWORD before running this script.");
}
const outDir = path.resolve("artifacts/onlineacademy");
await fs.mkdir(outDir, { recursive: true });
const browser = await chromium.launch({
headless: false,
slowMo: 150,
});
const context = await browser.newContext({
viewport: { width: 1440, height: 960 },
});
const page = await context.newPage();
const requests = [];
const payloads = {};
page.on("response", async (response) => {
const request = response.request();
const resourceType = request.resourceType();
if (!["document", "fetch", "xhr"].includes(resourceType)) {
return;
}
const url = response.url();
if (!url.includes("onlineacademy.nl")) {
return;
}
requests.push({
method: request.method(),
resourceType,
status: response.status(),
url,
});
if (response.status() !== 200) {
return;
}
if (
url.includes("/authoring/v1.0/contents/course/") ||
url.includes("/authoring/v1.0/contents/version?")
) {
try {
payloads[url] = await response.json();
} catch {
payloads[url] = { parseError: true };
}
}
});
async function shot(name) {
await page.screenshot({
path: path.join(outDir, name),
fullPage: true,
});
}
async function saveState(name) {
await fs.writeFile(path.join(outDir, name), await page.content(), "utf8");
}
await page.goto(targetUrl, { waitUntil: "domcontentloaded" });
await page.waitForLoadState("networkidle").catch(() => {});
await shot("01-open.png");
await saveState("01-open.html");
const emailField = page.locator('input[type="email"], input[name="email"]');
if ((await emailField.count()) > 0) {
await emailField.first().fill(email);
const passwordField = page.locator('input[type="password"]');
await passwordField.first().fill(password);
await shot("02-login-filled.png");
const submitButton = page.locator(
'button[type="submit"], button:has-text("Inloggen"), button:has-text("Log in")'
);
await submitButton.first().click();
await page.waitForURL((url) => !url.href.startsWith("https://identity.onlineacademy.nl"), {
timeout: 10000,
}).catch(async () => {
await passwordField.first().press("Enter").catch(() => {});
await page.waitForURL(
(url) => !url.href.startsWith("https://identity.onlineacademy.nl"),
{ timeout: 10000 }
);
});
await page.waitForLoadState("networkidle").catch(() => {});
}
await page.waitForTimeout(3000);
await shot("03-after-login.png");
await saveState("03-after-login.html");
const summary = await page.evaluate(() => {
const text = (selector) =>
Array.from(document.querySelectorAll(selector))
.map((node) => node.textContent?.trim())
.filter(Boolean);
const attrs = (selector, attr) =>
Array.from(document.querySelectorAll(selector))
.map((node) => node.getAttribute(attr))
.filter(Boolean);
return {
url: location.href,
title: document.title,
loginError: text(".input__error-message, .toast-manager, [role='alert']"),
chapterButtons: text('[data-testid="page-button"]'),
chapterTitles: attrs('.page__title input', 'placeholder'),
leftActions: text(".sidebar-left-actions .button__text"),
blockGroups: text(".dragblock-group__title"),
blockLabels: text(".content-block__text"),
blockTypes: attrs(".content-block[data-type]", "data-type"),
settingsTabs: text('[role="tab"]'),
};
});
await fs.writeFile(
path.join(outDir, "summary.json"),
JSON.stringify(summary, null, 2),
"utf8"
);
await fs.writeFile(
path.join(outDir, "requests.json"),
JSON.stringify(requests, null, 2),
"utf8"
);
await fs.writeFile(
path.join(outDir, "payloads.json"),
JSON.stringify(payloads, null, 2),
"utf8"
);
console.log(JSON.stringify(summary, null, 2));
console.log(JSON.stringify(requests, null, 2));
console.log(JSON.stringify(Object.keys(payloads), null, 2));
console.log(`Artifacts saved in ${outDir}`);
await page.waitForTimeout(5000);
await browser.close();