C# / .NET 10 alapú Facebook média letöltő Playwright böngészőautomatizálással.
A program a bejelentkezett Facebook munkamenetet használva képes egy profilról elérhető képek és videók letöltésére.
- Facebook profil persistent bejelentkezés
- külön Chromium profil használata
- képek letöltése a legnagyobb elérhető felbontásban
- videók letöltése Facebook CDN-ről
- Facebook byte-range alapú videó streamek kezelése
- külön video és audio assetek felismerése
- automatikus
ffprobeelemzés - legjobb videóminőség kiválasztása
- video és audio összefűzése FFmpeg segítségével
- külön
photosésvideoskönyvtár - duplikált képek kiszűrése
A programhoz szükséges:
- Windows 10 vagy Windows 11
- .NET 10 SDK
- Microsoft Playwright
- Chromium Playwright böngésző
- FFmpeg
- FFprobe
Telepítsd a Playwright csomagot:
Fordítsd le a projektet:
dotnet buildEzután telepítsd a Chromium böngészőt:
pwsh bin\Debug\net10.0\playwright.ps1 install chromiumWindows alatt például winget használatával:
winget install Gyan.FFmpegEllenőrzés:
ffmpeg -versionés:
ffprobe -versionMindkét parancsnak működnie kell abból a terminálból, amelyből a programot indítod.
A program első paramétere a Facebook URL.
A második opcionális paraméter a letöltési könyvtár.
Példa:
dotnet run -- "https://www.facebook.com/groups/646199282939310/media/videos" "D:\Facebook\PROFIL"Lefordított .exe használata esetén:
FacebookMediaDownloader.exe "https://www.facebook.com/groups/646199282939310/media/photos" "D:\Facebook\PROFIL"Az első futáskor a program megnyit egy Chromium böngészőt.
A böngésző egy külön persistent profilt használ.
A profil helye:
%LOCALAPPDATA%\FacebookMediaDownloader\ChromiumProfile
Például:
C:\Users\felhasznalo\AppData\Local\FacebookMediaDownloader\ChromiumProfile
Az első indításkor:
- jelentkezz be a Facebookra;
- végezd el a kétlépcsős hitelesítést, ha szükséges;
- állítsd be a Facebook cookie-hozzájárulást;
- a konzolban nyomj
ENTER-t.
A következő indításoknál a Facebook munkamenet normál esetben megmarad.
A program nem tárolja külön a Facebook-jelszót.
Ha például ezt adod meg:
FacebookMediaDownloader.exe `
"https://www.facebook.com/PROFIL" `
"D:\Facebook\PROFIL"akkor az eredmény:
D:\Facebook\PROFIL
│
├── photos
│ ├── 00001_2048x1365_52b9a52d31.jpg
│ ├── 00002_1536x2048_c23a087ce1.jpg
│ └── ...
│
├── videos
│ ├── 00001_123456789_1080p.mp4
│ ├── 00002_987654321_720p.mp4
│ └── ...
│
└── _temp
A _temp könyvtárat a program a videók feldolgozásához használja.
A sikeresen feldolgozott ideiglenes fájlokat automatikusan törli.
A program:
- összegyűjti a Facebook fotó URL-eket;
- megnyitja a fotóoldalt;
- megkeresi az elérhető Facebook CDN képeket;
- megvizsgálja azok tényleges felbontását;
- a legnagyobb képet tölti le.
A fájlnév tartalmazza a felbontást:
00001_2048x1365_52b9a52d31.jpg
Ebben:
00001
a sorszám,
2048x1365
a kép felbontása,
52b9a52d31
pedig egy rövidített egyedi azonosító.
A Facebook videók gyakran nem hagyományos, egyetlen MP4 fájlként kerülnek továbbításra.
A Facebook például ilyen URL-eket használhat:
video.mp4?...&bytestart=1322639&byteend=1649840
Ez csak egy videófragment, nem a teljes fájl.
A program ezért nem közvetlenül ezt menti el.
A folyamat:
Facebook video oldal
|
v
Playwright hálózati figyelés
|
v
Facebook CDN MP4 assetek
|
v
bytestart / byteend eltávolítása
|
v
teljes média asset letöltése
|
v
ffprobe elemzés
|
+--> video 360p
+--> video 720p
+--> video 1080p
+--> audio
|
v
legjobb video + audio
|
v
FFmpeg
|
v
kész MP4
A program minden letöltött assetet megvizsgál az ffprobe segítségével.
Például:
Asset 1
ffprobe: video 640x360, 475 kbps
Asset 2
ffprobe: video 1280x720, 1800 kbps
Asset 3
ffprobe: video 1920x1080, 3900 kbps
Asset 4
ffprobe: audio, 128 kbps
Ezután automatikusan a legnagyobb felbontású videót választja:
Legjobb video: 1920x1080
Audio asset: 128 kbps
és FFmpeg segítségével összefűzi őket.
Ha a Facebook külön video- és audiofájlt használ, a program lényegében ezt hajtja végre:
ffmpeg `
-i video.mp4 `
-i audio.mp4 `
-map 0:v:0 `
-map 1:a:0 `
-c copy `
-movflags +faststart `
output.mp4A:
-c copy
miatt nincs újrakódolás.
Ez azt jelenti, hogy:
- nincs minőségromlás;
- a feldolgozás gyors;
- az eredeti Facebook videó- és audiosáv kerül az eredménybe.
A Playwright böngészőprofil itt található:
%LOCALAPPDATA%\FacebookMediaDownloader\ChromiumProfile
Ezt ne töröld, ha szeretnéd megtartani a Facebook bejelentkezést.
Ha új Facebook sessiont szeretnél:
- zárd be a programot;
- töröld ezt a könyvtárat;
- indítsd újra a programot.
A következő indulásnál újra be kell jelentkezni.
Egy sikeres videófeldolgozás például:
[3/62]
https://www.facebook.com/PROFIL/videos/1517716313381066/
Elfogott MP4 request: 12
Egyedi asset: 4
dash_vp9-basic-gen2_360p
dash_vp9-basic-gen2_720p
dash_vp9-basic-gen2_1080p
dash_audio
Asset 1/4
méret: 2.15 MB
ffprobe: video 640x360, 475 kbps
Asset 2/4
méret: 8.73 MB
ffprobe: video 1280x720, 1800 kbps
Asset 3/4
méret: 17.40 MB
ffprobe: video 1920x1080, 3900 kbps
Asset 4/4
méret: 0.72 MB
ffprobe: audio, 128 kbps
Legjobb video: 1920x1080
Audio asset: 128 kbps
OK -> 00003_1517716313381066_1080p.mp4
Hiba:
HIBA: ffmpeg nincs a PATH-ban.
Ellenőrizd:
ffmpeg -versionHa nem működik, telepítsd:
winget install Gyan.FFmpegEzután nyiss új PowerShell ablakot.
Ellenőrzés:
ffprobe -versionAz FFprobe normál esetben az FFmpeg csomag része.
Futtasd:
pwsh bin\Debug\net8.0\playwright.ps1 install chromiumA session itt van:
%LOCALAPPDATA%\FacebookMediaDownloader\ChromiumProfile
Ellenőrizd, hogy a könyvtár nem törlődik-e két futtatás között.
A Facebook dinamikusan tölti be a tartalmakat.
A program automatikusan lefelé görget, de nagyon nagy profiloknál előfordulhat, hogy a Facebook nem tölti be egyszerre az összes régi médiát.
Ilyen esetben érdemes közvetlenül a profil megfelelő szekcióját megadni, például:
https://www.facebook.com/PROFIL/photos
vagy:
https://www.facebook.com/PROFIL/videos
A Chromium persistent profil Facebook session cookie-kat tartalmaz.
Ezért a következő könyvtár érzékeny adatnak tekintendő:
%LOCALAPPDATA%\FacebookMediaDownloader\ChromiumProfile
Ne:
- másold nyilvános helyre;
- töltsd fel GitHubra;
- add át másnak;
- csomagold bele egy release-be.
Git használata esetén érdemes .gitignore fájlban kizárni a helyi outputot:
bin/
obj/
downloads/
_temp/
facebook-cookies.txtRelease build:
dotnet build -c ReleaseAz executable ezután jellemzően itt lesz:
bin\Release\net8.0\
Windows x64 self-contained build például:
dotnet publish `
-c Release `
-r win-x64 `
--self-contained trueAz eredmény:
bin\Release\net8.0\win-x64\publish\
A Playwright Chromium böngészőt ettől függetlenül telepíteni kell azon a gépen, ahol a program fut.
A Facebook webes felülete és média-kiszolgálási mechanizmusa időről időre változik.
A program szándékosan nem a Facebook obfuszkált CSS class neveire épít, hanem főként:
- URL-struktúrára;
- Playwright hálózati eseményekre;
- Facebook CDN requestekre;
- tényleges képdimenziókra;
ffprobemédiavizsgálatra.
Ez robusztusabbá teszi a megoldást, de Facebook-oldali változás esetén később szükség lehet a feldolgozási logika módosítására.