Scraper
This commit is contained in:
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