83 lines
2.7 KiB
JavaScript
83 lines
2.7 KiB
JavaScript
const puppeteer = require("puppeteer");
|
|
function delay(ms) {
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
}
|
|
|
|
(async () => {
|
|
const browser = await puppeteer.launch({
|
|
headless: false,
|
|
defaultViewport: null,
|
|
args: ["--kiosk", "--disable-infobars", "--no-sandbox"]
|
|
});
|
|
|
|
const page = await browser.newPage();
|
|
await page.goto("https://my.flightradar24.com/dredgy", { waitUntil: "networkidle2" });
|
|
console.log("✅ Page loaded");
|
|
|
|
// Fullscreen button
|
|
await page.waitForSelector("button.gm-fullscreen-control", { visible: true });
|
|
await page.evaluate(() => {
|
|
const btn = document.querySelector("button.gm-fullscreen-control");
|
|
if (btn) btn.scrollIntoView(), btn.click();
|
|
btn.style.display = "none";
|
|
});
|
|
await delay(1000);
|
|
|
|
// Double-click zoom
|
|
const width = await page.evaluate(() => window.innerWidth);
|
|
const height = await page.evaluate(() => window.innerHeight);
|
|
const center = { x: width / 2, y: height / 2 };
|
|
for (let i = 0; i < 2; i++) {
|
|
await page.mouse.click(0, 0, { clickCount: 2 });
|
|
await delay(500);
|
|
}
|
|
console.log("✅ Zoomed in 2x");
|
|
|
|
const startX = center.x; // inside viewport
|
|
const startY = center.y;
|
|
|
|
const tileWidth = 3440;
|
|
const tileHeight = 1440;
|
|
const cols = 7;
|
|
const rows = 6;
|
|
const delayBetweenPans = 1000;
|
|
|
|
for (let row = 0; row < rows; row++) {
|
|
const leftToRight = row % 2 === 0; // snake pattern
|
|
|
|
for (let col = 0; col < cols; col++) {
|
|
console.log(`Panning row ${row + 1}, col ${col + 1}`);
|
|
await delay(delayBetweenPans);
|
|
|
|
// take screenshot
|
|
const filename = `output/tile_row${row + 1}_col${col + 1}.png`;
|
|
await page.screenshot({ path: filename });
|
|
console.log(`📸 Saved screenshot: ${filename}`);
|
|
|
|
// skip pan on last column
|
|
if (col === cols - 1) continue;
|
|
|
|
// horizontal pan
|
|
const panDistance = tileWidth * 0.5; // adjust for overlap
|
|
const dx = leftToRight ? -panDistance : panDistance; // left/right
|
|
await page.mouse.move(startX, startY);
|
|
await page.mouse.down();
|
|
await page.mouse.move(startX + dx, startY, { steps: 30 });
|
|
await page.mouse.up();
|
|
}
|
|
|
|
// vertical pan to next row
|
|
const verticalPan = tileHeight * 0.5; // adjust for overlap
|
|
await page.mouse.move(startX, startY);
|
|
await page.mouse.down();
|
|
await page.mouse.move(startX, startY - verticalPan, { steps: 30 }); // up = map moves down
|
|
await page.mouse.up();
|
|
|
|
await delay(delayBetweenPans);
|
|
}
|
|
|
|
|
|
|
|
console.log("✅ Finished panning loop");
|
|
})();
|