Compare commits

...

2 Commits

Author SHA1 Message Date
243f26270c Scraper 2025-12-03 13:54:09 +10:00
aa46b5edef Scraper 2025-12-03 13:53:24 +10:00
5 changed files with 1213 additions and 1 deletions

3
.gitignore vendored
View File

@@ -1,3 +1,4 @@
.idea
outputnod
node_modules
node_modules
output

82
Scraper.js Normal file
View File

@@ -0,0 +1,82 @@
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");
})();

View File

1124
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

5
package.json Normal file
View File

@@ -0,0 +1,5 @@
{
"dependencies": {
"puppeteer": "^24.29.1"
}
}