Compare commits
4 Commits
4bd6238d9d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 243f26270c | |||
| aa46b5edef | |||
| 140a0a059c | |||
| ee3b85125c |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
vendor
|
|
||||||
.idea
|
.idea
|
||||||
|
outputnod
|
||||||
|
node_modules
|
||||||
output
|
output
|
||||||
82
Scraper.js
Normal file
82
Scraper.js
Normal 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");
|
||||||
|
})();
|
||||||
1124
package-lock.json
generated
Normal file
1124
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
5
package.json
Normal file
5
package.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"puppeteer": "^24.29.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user