Как я воевал с Яндексом и решил проблему «мертвых душ» на диске

от автора

Всё началось на прошлой неделе. Я, как всегда, проверял утреннюю почту, как вдруг вылезло модальное окно, сообщающее, что-де ваш диск переполнен. Яндекс и раньше донимал меня этим, но в этот раз всё было серьёзно и даже угрожающе: поисковик и почтальон всея Руси угрожал, что отправлять и получать письма я больше не смогу.

Яндекс больше не поддерживал большие объёмы, и хотя он продолжал хранить файлы по инерции, политика компании требовала уменьшить занятое пространство, и всё, что пользователь насохранял за прошедшие годы, теперь требовалось подвергнуть ревизии, удалив лишнее. А те кулацкие подпевалы, что до сих пор не избавились от излишков, будут расстреляны лишены почтового сервиса!

Я зашёл на диск и нашёл там папку, которую ректальный зонд Яндекса когда-то импортировал с телефона кого-то из моих знакомых (через коего я всего-то пару раз заходил проверить почту). Чужие фото мне, конечно, были нужны как собаке пятая нога, и я удалил всю папку, очистил корзину и, убедившись, что диск пуст, собирался вернуться к своим делам. Однако приложение почты продолжило меня шантажировать. Объём, по его мнению, не уменьшился — было занято 10,2 ГБ из 10 возможных. Я, конечно же, был чрезвычайно озадачен и даже написал письмо в техподдержку, где просил забрать у меня диск, которым я вовсе не пользуюсь, и оставить мне только почту, нужную по долгу службы. На что мне холодно припомнили мой смертный 10,2-гигабайтный грех, за который я буду вечно гореть в аду (в том месте, где нет нашего любимого почтового приложения и его диска!). Конечно, у меня волосы дыбом встали от таких перспектив.

Яндекс готов войти в ваше положение... и не только

Яндекс готов войти в ваше положение… и не только

Покопавшись ещё разок-другой на диске, я обнаружил, что в нём существует сразу несколько несовместимых друг с другом абстракций: это, в первую очередь, конечно же, абстракция файлов — всем интуитивно понятная, но явно недостаточно извращённая для Яндекса; во вторую очередь, это «умные» папки, высосанные с других устройств; далее идут альбомы, которые ты задаёшь сам, и непрерывная лента фотографий, собранная с миру по нитке.

Так вот, «МЁРТВЫЕ ДУШИ» были найдены именно в последней — там были дубликаты всех уже удалённых ранее снимков из папок на диске — настоящий некрополис! Но не только они хранились в этой ленте, а также и другие объекты импорта, не числящиеся в файлах, и поскольку изображения, импортированные с разных гаджетов в одну охапку, составляли едва ли не десятки тысяч, требовалось бы создать одну галочку, выделив которую можно всё их снести в корзину, опорожнив кои любая бабуля из бухгалтерии сможет вернуться к своим должностным обязанностям.

Я написал в поддержку ещё раз с целью спросить, есть ли такая волшебная кнопка для бабушек, но они возмутились — «это же не наш метод!». Так что в этом месяце почты лишатся абсолютно все бабули с засоренными дисками и отсутствием внука-айтишника! Волшебной кнопки очистки ленты событий не было нигде — ни в приложении, ни в веб-интерфейсе.

Тут меня охватило конфуцианское чувство долга (ведь у меня тоже была бабуля, и очень даже любимая! И ещё есть мама, которая также не очень разбирается в интерфейсах, тем более таких «гениальных», как созданный великим и ужасным Яндексом).

Сим преисполнившись, я начал ваять юзер-скрипт для консоли браузера. План был таков:

  1. Найти в DOM-дереве первый снимок.

  2. Сделать на нём hover.

  3. Появится галочка.

  4. Делаем по ней click().

  5. Ждём, когда появится сверху галочка для выделения вообще всего события (например, «фото, сделанные в январе — 30 штук»).

  6. Делаем click() и клац.

  7. Ждём появления контекстного меню с button «удалить».

  8. click() — и всё удалено.

  9. Повторить while(1).

  10. ???

  11. ???

  12. ???

  13. PROFIT!!!

    Определить первое фото было изи через селектор document.querySelector(‘.with-checkbox-selectable-item .lite-checkbox__control’), а полный цикл был делом техники, изрядно смягчённой вайбкодингом.

    Через 10 минут фотографии были стёрты из ленты, я очистил корзину, и стало на диске 1 ГБ из 10,2, что были прежде.

    Всё это я быстро упаковал в расширение для Tampermonkey, которое вместо обезьянника я опубликовал на уютном Гитхабе, предоставив хабровчанам: https://github.com/dimpablo/ya_disk_desinfector, поелику эта проблема явно возникла не у меня одного.

    Будьте здоровы!

ссылка на оригинал статьи https://habr.com/ru/articles/1067178/