Я уже некоторое время подумываю закрыть свою учетную запись Facebook по «обычным» соображениям конфиденциальности и производительности.

Если бы мне пришлось это сделать, я бы хотел сохранить большое количество фотографий, на которых меня отметили за последние 10 лет. Поэтому я решил, что хорошим первым шагом к принятию окончательного решения будет загрузка всех моих фотографий, включая те, которые изначально не были загружены мной.

Facebook позволяет загружать фотографии прямо из «театра». Таким образом, просмотр всех моих фотографий и загрузка их по одной были вариантом, хотя и не очень привлекательным. Поскольку я кодер, я подумал, что было бы интереснее придумать решение, которое автоматизировало бы процесс загрузки.

Подход

На высоком уровне подход заключается в программном циклическом просмотре всех фотографий путем многократного нажатия на экран точно так же, как это сделал бы человек, если бы он щелкал по альбому Facebook. Ведение журнала Chrome включено для сбора информации о том, что отправляется по сети, пока это происходит. Наконец, URL-адреса фотографий извлекаются из журналов Chrome и загружаются.

Кодекс и инструкции

  1. Установите питон 3.Х
  2. pip установить PyAutoGUI; запросы на установку pip
  3. Поместите указатель мыши куда-нибудь, чтобы фотография Facebook «театр» загрузила следующую картинку.
  4. Запустите getMousePosition.py, когда мышь находится в положении из шага 3, и запишите значения X и Y.
  5. Перейдите на chrome://net-export/# и начните запись в файл на диске (‹path_to_chrome_log›)
  6. Если Facebook открыт так, что при нажатии на значения X и Y из шага 4 происходит переход к следующей фотографии: запустите clicker.py ‹x› ‹y›
  7. Устройтесь поудобнее и подождите, пока ваши изображения будут просматриваться (завершите процесс после его завершения, не имеет значения, если он будет повторяться несколько раз). Это на самом деле очень весело смотреть!
  8. Запустите ExtractURLs.py ‹path_to_chrome_log› ‹path_to_url_file›
  9. Запустите downloadPhotos.py ‹path_to_url_file› ‹path_to_directory›

Возможно, потребуется изменить регулярное выражение в extractURLs.py (при тестировании, когда я писал это, мне пришлось использовать «lht6–1» вместо «lhr3–1»), и в зависимости от вашей платформы вам может потребоваться внести несколько других изменений. чтобы все заработало (я запускал это в Windows).

Последние мысли

Это довольно мощный подход и определенно проще, чем использование чего-то вроде Selenium. Вероятно, его можно (хотя я и не пробовал) относительно просто применить к другим платформам.