EN
Инструменти и хардуерPython

Сваляне на пост от Facebook

Сваля текста и снимките от пост във Facebook с Playwright.

README

facebook-post-down

Сваля текста и снимките (в пълен размер) от пост във Facebook.

Най-лесно: start.bat

Цъкни два пъти на start.bat. Той пита кой потребител и колко поста назад, сваля ги и накрая отваря папката downloads.

  • Ползва venv до скрипта. Ако го няма, при първото пускане го създава и инсталира нужното.
  • Ако още не си влизал във Facebook, отваря прозорец за вход (само първия път).

Инсталация (ръчно)

pip install -r requirements.txt

Ползва вече инсталиран Microsoft Edge или Google Chrome. Ако нямаш нито един от двата:

python -m playwright install chromium

Употреба

Първо влизаш в акаунта си (само веднъж). Сесията се пази във fb_session.json:

python fb_post.py --login

След това:

python fb_post.py "https://www.facebook.com/.../posts/..."
python fb_post.py линк1 линк2 линк3
python fb_post.py -f links.txt          # по един линк на ред
python fb_post.py --headless "линк"     # без прозорец на браузъра

По потребител или страница

Вместо линкове може да дадеш потребителско име, id или линк към профила. Скриптът отваря профила, скролира стената и сваля последните --limit поста (по подразбиране 10):

python fb_post.py -u zuck --limit 20
python fb_post.py -u 100000000000000                 # числово id
python fb_post.py -u "https://www.facebook.com/nasa"
python fb_post.py -u nasa -u spacex --limit 5        # няколко наведнъж

Постовете отиват в downloads/<потребител>/.

Резултат

За всеки пост се прави папка downloads/<дата>_<id>/ с:

  • text.txt - текстът на поста (с натиснато „Виж още“)
  • 01.jpg, 02.jpg, … - снимките в оригинален размер
  • info.json - линк, текст и адресите на снимките

Защита на акаунта

Facebook забранява автоматизираното събиране на данни. Затова скриптът се държи като човек:

  • Паузи: случайни 2-5 с между снимките, 10-25 с между постовете и 2-4 с между скроловете. Затова е бавен, около минута на пост с много снимки.
  • Нормален браузър: без видим прозорец се представя като обикновен Edge/Chrome, а не като HeadlessChrome. Флагът navigator.webdriver е изключен.
  • Дневен лимит: до 50 поста на ден. Броят се в usage.json, а при изчерпване скриптът спира.

Стойностите са най-горе във fb_post.py (PHOTO_PAUSE, POST_PAUSE, SCROLL_PAUSE, DAILY_LIMIT). Ако ги намалиш или вдигнеш лимита, рискът от блокиране расте.

Ограничения

  • Facebook често сменя HTML-а си. Ако текстът спре да се намира, обнови селекторите в EXTRACT_JS.
  • Видеата не се свалят.
  • Снимките от коментарите не се свалят.
  • fb_session.json съдържа бисквитките за вход в акаунта ти. Не го споделяй (вече е в .gitignore).