Лайфхакер
Лайфхакер
Лучшее
Рубрики
Рецепты
Подкасты
Сервисы
Колонки
Лучшее
Рубрики
Рецепты
Подкасты
Сервисы
Колонки
Выгодные покупки
Новости
Здоровье
Спорт и фитнес
Покупки
Технологии
Отношения
Кино
Реклама
ЛикбезЕда
31 мая 2017

Пищевые добавки: читаем состав продукта и не пугаемся

Лайфхакер разобрался, какие Е в продуктах что означают и стоит ли приклеивать на холодильник список запрещённых добавок.
Фото автора Анастасия Пивоварова
Анастасия Пивоварова

Автор Лайфхакера

Пищевые добавки: читаем состав продукта и не пугаемся

Что такое пищевые добавки и зачем они нужны

Пищевая добавка — это любое вещество, которое мы не едим как самостоятельное и которое специально добавляют к продуктам, чтобы добиться от них определённых свойств.

Пищевые добавки придумали, чтобы сделать еду лучше. Например, сохранить её на долгий срок, когда нужно запастись продуктами, или усилить вкус и сохранить текстуру еды.

Без добавок полки магазинов будут почти пустыми: без консервантов продукты быстро испортятся, без стабилизаторов и антиокислителей многие вообще не появятся.

Идея использовать некоторые вещества, чтобы улучшить еду, не новая, ведь специи, соль, крахмал и уксус — тоже пищевые добавки, пусть и известные много веков. Но пищевые добавки — это ещё и страшилка о вредной химии, от которой мы все болеем и умираем.

На самом деле все вещества, которые есть в природе, — это тоже химия, а пищевые добавки даже с «ужасным» индексом Е могут быть натуральными (и при этом куда более опасными, чем синтетические).

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

Вредные они или невредные?

Это, должно быть, самый важный вопрос, который волнует всех, кто рассматривает очередную упаковку с перечислением загустителей, красителей и консервантов.

Отвечаем: пищевые добавки не должны быть вредными. Все добавки, которые оказываются в нашей еде, должны соответствовать стандартам и нормативам. А если у добавки есть код, который начинается с буквы Е, то это ещё лучше. Код означает, что вещество соответствует Codex Alimentarius — документу, который регламентирует международные пищевые стандарты.

Если у добавки есть индекс Е, это значит, что вещество исследовали и проверили, а также высчитали дозу, при которой оно безопасно.

Опасным может быть любое вещество, даже чистая вода. Вопрос только в количестве. Самые полезные на свете витамины при передозировке превращаются в яды.

Добавки, которые используют в пищепроме, в этом смысле не отличаются от всех прочих веществ. У каждой есть норма допустимого ежедневного употребления (ADI). Это та доза вещества, которую можно получать без вреда для здоровья

каждый день.

Чтобы вычислить эту дозу, проводят эксперименты на животных. Находят самый высокий уровень потребления добавки, при котором ничего животному не будет, а потом делят на коэффициент безопасности, нужный для учёта различий между животным и человеком. Полученную дозу записывают в миллиграммах (вещества) на килограмм (массы тела человека), при этом средний вес человека считается равным 60 кг.

А уже из этого значения вычисляют, сколько и какой добавки можно положить в продукты. При этом учитывается масса факторов. Например, если исследования показывают, что по воскресеньям люди едят в три раза больше колбасы, чем в течение недели, то при расчёте ежедневной допустимой дозы это будут иметь в виду. Что это значит для нас?

Есть еду с пищевыми добавками можно, потому что их долго и упорно проверяли.

Но не всё, что разрешено, полезно. Добавки в тех количествах, которые есть в пище, не причиняют явного вреда, но и пользы могут никакой не нести. А могут вызывать индивидуальные реакции, ту же аллергию.

Кроме того, исследования продолжаются. Когда-то была разрешена косметика со свинцом, и некоторые пищевые добавки время от времени переходят в категорию «Они вреднее, чем мы думали», как синтетические красители или салициловая кислота. А ещё есть национальные стандарты, которые отличаются от рекомендованных кодексом. Например, добавки, запрещённые в одной стране, могут быть разрешены в другой, как подсластитель цикламат натрия (Е952), который исключили из нашего СанПиН в 2010 году.

Есть ещё два факта, которые заставляют сомневаться в пользе пищевых добавок:

  1. Мы не можем проверить, соблюдал ли производитель все нормы и правила при изготовлении продукта.
  2. Сама еда не всегда полезна. Если жить на лапше быстрого приготовления, то вам будет плохо. Но не из-за добавок, а из-за нехватки питательных веществ, витаминов, клетчатки и минералов.

Какими бывают пищевые добавки

Классификация пищевых добавок основана на их функциях: ароматизаторы — для запаха, красители — для внешнего вида, консерванты — для длительного хранения. Таких классов добавок больше 20, разберёмся с основными.

Некоторые добавки вреднее других, поэтому их содержание должно контролироваться особенными методами. Это дело проверяющих органов и Роспотребнадзора, а мы, со своей стороны, можем только решать, стоит ли есть очередной продукт, у которого в составе подозрительная добавка. Такие добавки перечислены в отдельных рамках.

Красители

Индексы: E100 — E182.

Красители усиливают или меняют цвет продукта. По нормам Таможенного союза, использовать их разрешается не везде. Необработанные продукты, например, должны выглядеть такими, какие они есть. Мясо, молоко, яйца, фрукты и овощи, чай и шоколад хороши и без красителей. Также нельзя подкрашивать питание для детей до 3 лет.

Красители бывают трёх типов:

  1. Натуральные. Их получают из листьев, плодов или даже насекомых. Например, из моркови, куркумы, шпината. У них тоже есть свои индексы Е, то есть это натуральные добавки: каротины (Е160а), сахарный колер (Е150), хлорофиллы (Е140), кармины (Е120), производные паприки (Е160с), антоцианы (Е163), рибофлавин (Е101). Несмотря на всю их натуральность, у них есть нормы употребления.
  2. Синтетические. Это органические красители, которые созданы человеком. Эти красители используют чаще натуральных, потому что они более устойчивые и яркие, дают более приятные цвета, ещё и стоят при этом дешевле. Но к ним и вопросов больше: некоторые могут накапливаться в организме, у некоторых есть токсическое действие. Их не должно быть в детских продуктах, а концентрация синтетических красителей в любой другой еде не должна превышать 0,01%.
  3. Минеральные. Красители из минеральных веществ. Их обычно используют для окраски поверхностей.

Красители, содержание которых дополнительно контролируют: азорубин (Е122), жёлтый хинолиновый (E104), жёлтый «солнечный закат» (E110), зелёный прочный FCF (Е143), зелёный S (Е142), индигокармин (Е132), коричневый HT (Е155), красный очаровательный AC (E129), понсо 4R (E124), синий блестящий FCF (Е133), синий патентованный V (Е131), тартразин (E102), чёрный блестящий PN (Е151), аннато (Е160b), кармины (Е120), куркумин (Е100), лютеин (Е161b), ликопин (Е160d).

Консерванты

Индексы: Е200 — Е299.

Консерванты — соединения, которые должны сохранять продукт от порчи. Грубо говоря, они должны уничтожать бактерии, грибки (плесень) и все те микроорганизмы, которые хотят съесть этот продукт раньше, чем мы.

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

Совсем без консервантов не прожить: вред от испорченного продукта куда больше, чем от тщательно выверенной дозы добавки.

Например, одна из главных пугалок — нитраты и нитриты (Е240 — Е259), которые одновременно и консерванты, и красители. Они сохраняют яркий цвет мясных продуктов и заодно спасают колбасу и сосиски от развития в них ботулиновой палочки. Если кто не в курсе, она вызывает смертельно опасное заболевание, а внешне заражённый продукт ничем не отличается от чистого.

Нитраты и нитриты повинны в том, что из них в организме образуются нитрозамины, которые уже вредны: у них есть канцерогенный эффект, они влияют на артериальное давление. Да и в целом постоянное употребление красного мяса и солей азотной кислоты (нитратов и нитритов) не слишком полезно.

Нюанс в том, что в принципе в мясе образование нитрозаминов — это естественный процесс. И в нашем организме они образуются, а нитриты, которые этому способствуют, проще получить из обычной свёклы, чем из колбасы.

А консервант диоксид серы (Е220) вообще можно не указывать на упаковке, если его мало (менее 10 мг/кг).

Нельзя просто так взять и сказать, какое количество консервантов должно содержаться в продукте, потому что одно и то же вещество в разных пищевых продуктах может иметь разную концентрацию.

Например, в напитках безалкогольных ароматизированных — в газировке или соке — бензойная кислота и её соли могут быть в количестве 120 мг/кг, а в обычной свёкле — 2 г на кг, в яйцах вообще до 5 г. Эти добавки вызывают аллергические реакции, но отреагировать на чернику человек может намного сильнее, чем на недорогую колбасу.

Опасные консерванты: бензойная кислота и её соли (Е210 — Е219), дегидрацетовая кислота (Е265) и её соль (Е266), дифенил (Е230), нитраты и нитриты (Е240 — Е259), парабены (Е214 — Е219), сернистая кислота и её соли (Е220 — Е228), сорбиновая кислота и её соли сорбаты (Е200 — Е209).

Антиокислители

Индексы: Е300 — Е399.

Антиокислители под чуть более красивым названием «антиоксиданты» усиленно хвалят сторонники здорового питания. Они есть в зелёном чае и фруктах. Это и аскорбиновая кислота (Е300), и лимонная (Е330), и ортофосфорная кислота (Е338), благодаря которой можно чистить чайники кока-колой и заработать проблемы с желудком, если переборщить с употреблением.

Антиоксиданты нужны, чтобы сохранять жиры и регулировать вкус продуктов. Например, токоферолы (Е306 — Е309) и так содержатся в некоторых жирных кислотах, обладают полезными свойствами и, если их добавить в продукт в сочетании с другими антиоксидантами, долго сохраняют свежесть товара.

Многие антиокислители получают из натурального сырья: гваяковой смолы (Е314), сои, овса — или изготавливают с точно такой же химической формулой, как аскорбинку.

Из синтетических антиоксидантов, содержание которых контролируют и ограничивают, распространены ионол (Е321), бутилоксианизол (Е320), трет-бутилгидрохинон (Е319), пропиловый, октиловый и додециловый эфиры галловой кислоты (Е310 — Е312), фосфаты (Е340 — Е349).

Стабилизаторы

Индексы: Е400 — Е499.

Это добавки, которые должны сделать консистенцию продукта лучше и сохранить её надолго. Как правило, эти вещества мало влияют на организм, потому что многие почти не всасываются в желудочно-кишечном тракте. Так что их редко можно встретить в списках «самых вредных на свете» добавок.

Впрочем, это не значит, что их можно есть в неограниченных количествах. Они могут, например, испортить пищеварение, потому что замедлят всасывание других веществ, а исследования их влияния на кишечник продолжаются.

Что относится к стабилизаторам:

  1. Загустители. Они нужны, чтобы делать гели, желе, студни. В продукты разрешают добавлять либо натуральные загустители, либо полусинтетические. Натуральные добывают из растений: гуаровая камедь (Е412), агар (Е406), гуммиарабик (Е414), пектины (Е440). Полусинтетические тоже происходят из растений, но они модифицированы, чтобы добиться определённых свойств. Это метилцеллюлоза (Е461), модифицированные крахмалы (не генно-модифицированные, это другая технология), альгиновая кислота (Е400) и её соли (Е401 — Е405). Синтетические загустители тоже существуют, но их в продукты не добавляют.
  2. Эмульгаторы и стабилизаторы. Они нужны, чтобы уже готовые смеси не распадались на соединения. Например, смешать масло с водой и надолго запечатать поможет эмульгатор. Благодаря стабилизаторам и эмульгаторам йогурт — это йогурт, а не слежавшаяся масса в луже воды. Эти вещества делают на основе жирных кислот (Е470 — Е489), эфиров.

Носители, которые должны контролироваться: пропиленгликоль (Е490), фосфаты (Е450 — Е459).

Регуляторы кислотности, улучшители

Индексы: Е500 — Е599.

Эта группа веществ чем-то похожа на предыдущую. Смысл регуляторов — сохранить консистенцию продукта. Например, сделать так, чтобы мука не слёживалась, с помощью сульфата аммония (Е517).

Ароматизаторы и усилители вкуса

Индексы: Е600 — Е699.

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

В России можно использовать несколько тысяч веществ, из которых составляются ароматизаторы. Запахи, которые мы чувствуем, состоят из нескольких ароматических веществ, действующих на наши рецепторы.

Страшные химические названия в обозначениях ароматизаторов не означают, что всё плохо. Химики не называют земляничный запах «запахом земляники» хотя бы потому, что в землянике десятки ароматических веществ с жуткими наименованиями типа ноналактон или бензилацетат.

Разобраться без специального образования и опыта, что можно, а что нельзя, нереально, тем более что производители не обязаны указывать, какие именно ароматические вещества использовались в ароматизаторе.

Мы можем увидеть только, натуральный это ароматизатор или синтетический. Натуральный — это тот, в котором все составные части получены из природных источников. К синтетическим относятся все остальные.

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

На всякий случай запомните, что нельзя добавлять ароматизаторы, чтобы имитировать запах продукта. Например, ароматизатор «хлеб» в собственно хлеб или «молоко» в молоко. Зато в молочный продукт уже можно. Ещё нельзя ароматизировать продукты, чтобы спрятать запах порчи.

Усилители вкуса нужны, чтобы улучшить естественный вкус продукта и сделать его привлекательнее. Самый известный среди них — глутамат натрия (Е621). Вокруг него много споров: то ли считать, что он виноват во всех бедах от ожирения до головной боли, то ли признать его абсолютно безвредным.

Так или иначе, но наши законы рекомендуют относиться к глутаминовой, гуаниловой и инозиновой кислотам и заодно их солям (Е620 — Е633), а также к 5′- рибонуклеотидам (Е634 — Е635) с осторожностью.

Подсластители, дополнительные ингредиенты и пеногасители

Индексы: Е700 — Е900.

Все уже выяснили, что сахар — зло. Но в мире существуют природные (стевиозид, аминокислоты) и синтетические (сахарин, ксилит, цикламаты) вещества, которые намного слаще сахара, а вреда от них меньше. Подсластители нужны для диетического питания, их рекомендуют людям, больным диабетом. Правда, некоторые сладкие добавки имеют побочные эффекты. Цикламаты (Е952), например, исключили из списка разрешённых в России в 2010 году.

Помните, что если в составе продукта есть изомальтит (E953), ксилит (E967), лактит (E966), мальтит (E965), маннит (E421), сорбит (E420), эритрит (E968), то они могут оказывать послабляющее действие.

Подсластители, которые должны контролироваться: аспартам (Е951), ацесульфам (Е950), аспартам-ацесульфама соль (Е962), неогесперидин дигидрохалкон (Е959), сахарин (Е954), сукралоза (Е955), тауматин (Е957).

Дополнительные вещества

Индекс: Е900 — Е1999.

Это огромная группа веществ, которые не поместились в предыдущие разделы. Тут и добавки, которые нужны для упаковки продуктов, и стабилизаторы, и всё остальное.

Контролироваться должны: диацетин (Е1517), триацетин (Е1518), бензиловый спирт (Е1519), триэтилцитрат (Е1505).

Как понять, что продукт можно есть

Рассчитывать, что и в каких количествах положил производитель в продукт, дело неблагодарное. Понятно, что пищевые добавки — это способ сделать еду дешевле или превратить нечто условно съедобное во что-то аппетитное. Та же колбаса без мяса может быть безвредной. И абсолютно бесполезной.

Поэтому принцип «Чем меньше в продукте добавок, тем лучше» работает.

Но даже качественные и полезные продукты не обходятся без добавок, пусть их всего две, а не 20.

По нормам каждая добавка на упаковке должна быть подробно описана: зачем нужна (её функция), индекс (если есть) или название. По идее, честный производитель не станет писать «ароматизатор». Нужно указать, какой это ароматизатор, из чего состоит или как называется. А комплексные добавки должны расшифровываться.

Стоит ли отдельно записывать, какие добавки запрещены, и сверять с этим списком каждую коробку? Не стоит. Даже если кто-то из производителей решит каким-то образом раздобыть и применить запрещённый продукт, вряд ли он в здравом уме укажет это на упаковке. Если вы сомневаетесь, то проверку лучше проводить, сверяя упаковку с СанПиН или регламентами Таможенного союза.

К 2020 году EFSA должна переоценить все пищевые добавки, которые были разрешены в ЕС до 20 января 2009 года. Это значит, что нас ещё может ждать масса новостей о том, что мы едим.

Если нашли ошибку, выделите текст и нажмите Ctrl + Enter

Лучшие предложения

10 пар зимней обуви с хорошими скидками на «чёрной пятнице»

10 пар зимней обуви с хорошими скидками на «чёрной пятнице»

постельное белье

21 комплект постельного белья, который преобразит вашу спальню

Roborock Q5 Pro

Надо брать: робот-пылесос Roborock Q5 Pro со скидкой 76%

Гидравлический домкрат с высоким рейтингом отдают со скидкой 35% на AliExpress

Гидравлический домкрат с высоким рейтингом отдают со скидкой 35% на AliExpress

23 нарядных платья, которые можно надеть на новогодний корпоратив

23 нарядных платья, которые можно надеть на новогодний корпоратив

10 рюкзаков для ноутбука, которые не боятся мокрого снега и дождя

10 рюкзаков для ноутбука, которые не боятся мокрого снега и дождя

5 милых мягких игрушек для тех, кто любит мультфильмы Хаяо Миядзаки

5 милых мягких игрушек для тех, кто любит мультфильмы Хаяо Миядзаки

Самый популярный компрессор от Baseus отдают за полцены

Самый популярный компрессор от Baseus отдают за полцены

Это интересно
Пазл жизни: что нужно знать о донорстве костного мозга

Пазл жизни: что нужно знать о донорстве костного мозга

ИГРА: Полный бак бонусов

ИГРА: Полный бак бонусов

Новые киберловушки: мошенники атакуют россиян через QR-коды, NFC и умные гаджеты

Новые киберловушки: мошенники атакуют россиян через QR-коды, NFC и умные гаджеты

VK Education запускает кейс-чемпионат для студентов с призовым фондом 1 млн рублей

VK Education запускает кейс-чемпионат для студентов с призовым фондом 1 млн рублей

Комментарии
Кучерявый Александр
31.05.17 12:32
Одна из самых емких и основательных статей на портале ( к сожалению, чаще здесь печатается откровенная попса и бумагомарательство). Автору ОГРОМНОЕ спасибо! за работу.
Maxx
31.05.17 12:35
Да, труд внушительный. Автор молодец
Анюточка Климова
31.05.17 21:10
Разработчики, не могу просматривать статьи лайфхакера до конца, автоматически перекидвает на начало. !!!!! Помогите!!! Стало просто невозможно что-либо читать!! Может, это так не только у меня?
Алексей Пономарь
01.06.17 13:48
На начало одной и той же статьи? На чем читаете?
Валерий Моисеев
02.06.17 03:31
У меня тоже. Я думал, что виноват мой компьютер.
Елена Зубарева
28.02.18 11:55
Спасибо, очень грамотная статья, обязательно сохраню.
Больше интересных рецептов
10 способов приготовить бесподобную утку в духовке
10 способов приготовить бесподобную утку в духовке
0
18:00
Еда
Ликбез
Тот самый классический салат цезарь с курицей
Тот самый классический салат цезарь с курицей
14:30
«Горящая изба»
Еда
Пироги и пирожки, которые готовятся из обычного лаваша
Пироги и пирожки, которые готовятся из обычного лаваша
12:00
Еда
Еда
8 способов вкусно засолить икру горбуши в домашних условиях
8 способов вкусно засолить икру горбуши в домашних условиях
0
Вчера
Еда
Ликбез
Запеканки с курицей, которые надолго поселятся в меню
Запеканки с курицей, которые надолго поселятся в меню
Вчера
Еда
Еда
Как приготовить идеальные булочки с начинками и без
Как приготовить идеальные булочки с начинками и без
20 ноября
Еда
Еда
Как приготовить киш лорен и другие вариации знаменитого пирога
Как приготовить киш лорен и другие вариации знаменитого пирога
19 ноября
Еда
Еда
Салаты с рыбными консервами: лучшие варианты
Салаты с рыбными консервами: лучшие варианты
18 ноября
Еда
Еда
Что такое дижонская горчица и чем она отличается от обычной
Что такое дижонская горчица и чем она отличается от обычной
0
17 ноября
Еда
Ликбез
37 рецептов вкусного шоколадного печенья
37 рецептов вкусного шоколадного печенья
17 ноября
Еда
Еда
17 вкусных рулетов из лаваша, с которыми справится кто угодно
17 вкусных рулетов из лаваша, с которыми справится кто угодно
0
16 ноября
Еда
Ликбез
Нежные тыквенные супы, от которых так и веет теплом
Нежные тыквенные супы, от которых так и веет теплом
16 ноября
Еда
Еда
Как запечь свёклу в духовке правильно
Как запечь свёклу в духовке правильно
0
15 ноября
Еда
Ликбез
Простой шоколадный кекс на кефире
Простой шоколадный кекс на кефире
15 ноября
«Горящая изба»
Еда
Как приготовить самые популярные торты, которые все так любят
Как приготовить самые популярные торты, которые все так любят
15 ноября
Еда
Еда

Новые комментарии

Аватар автора комментария
D.V.1 час назад

0 / 0

Про натертую пятку это круто !
Что такое shallowing — секс-тренд, который очень нравится женщинам
Аватар автора комментария
Информатик2 часа назад

0 / 0

на xiaomi 11 не работает. Вкл режим Factory Mode . Чтоб выти из режима нужно все время клавищей выкл жать и чтоб выбрана верхняя стройка была..
Как включить и отключить безопасный режим на Android-смартфоне
Аватар автора комментария
Кирилл Тимонин2 часа назад

0 / 0

22.11.2025 - новая версия скрипта для автоматического удаления постов со стены ВК, учитывающая все изменения алгоритма удаления постов и интерфейса ВК. У скрипта есть удобное меню для управления процессом. Пред запуском скрипта необходимо войти в режим просмотра сообщений стены с выбором по календарю (двойной клик по слову Сообщения). Далее - выбираете год и дату в календаре, с которой начинать удалять сообщения - например 31 декабря 2023 года. Сообщения будут удаляться в прошлое - весь декабрь, ноябрь, октябрь и так далее. В меню скрипта нужно выбрать год - это служит предохранителем от случайного удаления текущих постов этого года. Скорость удаления постов от 0.1 до 3 секунд. Настраивать в зависимости от скорости вашего интернета и мощности компьютера. Для максимально быстрой работы скрипта необходимо в настройках браузера отключить показ картинок и видео. Скрипт успешно тестировался в браузере Хром на любых скоростях. Удаляет без ошибок. var test = false, count = 0, targetYear = 2024, deletePause = 100; var controlElements = {}; // Объект для хранения элементов управления // Функция создания панели управления function createControlPanel() { var panel = document.createElement('div'); panel.style.cssText = ` position: fixed; top: 20px; right: 20px; z-index: 10000; background: rgba(0,0,0,0.8); color: white; border-radius: 10px; padding: 15px; font-family: Arial, sans-serif; min-width: 200px; backdrop-filter: blur(10px); `; var title = document.createElement('div'); title.innerHTML = '🎯 Управление удалением'; title.style.cssText = 'font-weight: bold; margin-bottom: 10px; font-size: 16px;'; panel.appendChild(title); var stats = document.createElement('div'); stats.id = 'controlStats'; stats.innerHTML = `Год: ${targetYear}Удалено: ${count}Пауза: ${deletePause/1000}сек`; stats.style.cssText = 'margin-bottom: 10px; font-size: 12px; line-height: 1.4;'; panel.appendChild(stats); // Кнопка остановки/продолжения controlElements.stopBtn = document.createElement('button'); controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.cssText = ` background: #ff4444; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; margin-right: 5px; margin-bottom: 5px; width: 100%; `; controlElements.stopBtn.onclick = function() { if (test) { // Останавливаем скрипт test = false; controlElements.stopBtn.innerHTML = '▶️ Продолжить'; controlElements.stopBtn.style.background = '#44aa44'; console.log('⏸️ Скрипт приостановлен пользователем'); } else { // Продолжаем скрипт test = true; controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; console.log('▶️ Скрипт продолжен пользователем'); // Запускаем процесс снова setTimeout(() => { processPostsContinuously(); }, 100); } updateControlPanel(); }; panel.appendChild(controlElements.stopBtn); // Кнопка перезапуска var restartBtn = document.createElement('button'); restartBtn.innerHTML = '🔄 Перезапустить'; restartBtn.style.cssText = ` background: #44aaff; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; margin-bottom: 5px; width: 100%; `; restartBtn.onclick = function() { test = false; console.log('🔄 Перезапуск скрипта...'); // Сбрасываем кнопку остановки к красному цвету if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; } setTimeout(() => { restartWithNewSettings(); }, 500); }; panel.appendChild(restartBtn); // Кнопка быстрых настроек var settingsBtn = document.createElement('button'); settingsBtn.innerHTML = '⚙️ Быстрые настройки'; settingsBtn.style.cssText = ` background: #ffaa00; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; width: 100%; `; settingsBtn.onclick = function() { quickSettings(); }; panel.appendChild(settingsBtn); document.body.appendChild(panel); return panel; } // Функция сброса кнопки остановки при перезапуске function resetStopButton() { if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; } } // Функция обновления панели управления function updateControlPanel() { var stats = document.getElementById('controlStats'); if (stats) { stats.innerHTML = `Год: ${targetYear}Удалено: ${count}Пауза: ${deletePause/1000}секСтатус: ${test ? 'активен' : 'пауза'}`; } } // Функция быстрых настроек function quickSettings() { if (test) { alert('Сначала остановите скрипт для изменения настроек!'); return; } var newPause = parseFloat(prompt('Новая пауза между удалениями (секунды):\n\n0.1-0.3 - Максимальная скорость\n0.5-1.0 - Баланс\n1.5-3.0 - Максимальная надежность', deletePause/1000)); if (!isNaN(newPause) && newPause >= 0.1 && newPause <= 3) { deletePause = newPause * 1000; console.log('⚙️ Пауза изменена: ' + newPause + ' сек.'); updateControlPanel(); } else { alert('Некорректное значение паузы!'); } } // Функция перезапуска с новыми настройками function restartWithNewSettings() { // Сбрасываем счетчик count = 0; // Запрос года для удаления var currentYear = new Date().getFullYear(); var newTargetYear = parseInt(prompt('Введите год, посты за который нужно удалить\n(например: 2024, 2023, 2022)', targetYear)); // Проверка корректности года if (isNaN(newTargetYear) || newTargetYear < 2000 || newTargetYear > currentYear) { alert('Некорректный год! Будет использован предыдущий год: ' + targetYear); } else { targetYear = newTargetYear; } // Настройка паузы между удалениями var pauseInput = parseFloat(prompt('Пауза между удалениями постов (секунды)\n\nРекомендации:\n• 0.1-0.3 - Максимальная скорость (риск ошибок)\n• 0.5-1.0 - Баланс скорости и надежности\n• 1.5-3.0 - Максимальная надежность', deletePause/1000)); // Проверка и ограничение паузы if (isNaN(pauseInput) || pauseInput < 0.1) { pauseInput = 0.1; } else if (pauseInput > 3) { pauseInput = 3; } deletePause = pauseInput * 1000; test = confirm("⚡ НОВЫЕ НАСТРОЙКИ УДАЛЕНИЯ:\n\n• Год: " + targetYear + "\n• Пауза между удалениями: " + pauseInput + " сек." + "\n• Медиа заблокированы: Да\n\nНачать удаление с новыми настройками?"); if (test) { console.log('🔄 ПЕРЕЗАПУСК С НОВЫМИ НАСТРОЙКАМИ'); console.log('🎯 Целевой год: ' + targetYear); console.log('⏱️ Пауза между удалениями: ' + pauseInput + ' сек.'); // Сбрасываем кнопку остановки к красному цвету resetStopButton(); updateControlPanel(); startContinuousDeletion(); } else { updateControlPanel(); } } // Остановка по клавише ESC document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && test) { test = false; if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '▶️ Продолжить'; controlElements.stopBtn.style.background = '#44aa44'; } console.log('⏸️ Скрипт приостановлен по клавише ESC'); updateControlPanel(); } }); function disableMediaLoading() { document.querySelectorAll('img, video, iframe').forEach(el => { el.style.display = 'none'; }); const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.nodeType === 1) { if (node.tagName === 'IMG' || node.tagName === 'VIDEO') { node.style.display = 'none'; } node.querySelectorAll?.('img, video').forEach(media => { media.style.display = 'none'; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); console.log('⚡ Медиа заблокированы'); } function itit() { disableMediaLoading(); // Запрос года для удаления var currentYear = new Date().getFullYear(); targetYear = parseInt(prompt('Введите год, посты за который нужно удалить\n(например: 2024, 2023, 2022)', currentYear)); // Проверка корректности года if (isNaN(targetYear) || targetYear < 2000 || targetYear > currentYear) { alert('Некорректный год! Будет использован текущий год: ' + currentYear); targetYear = currentYear; } // Точная настройка паузы между удалениями var pauseInput = parseFloat(prompt('Пауза между удалениями постов (секунды)\n\nРекомендации:\n• 0.1-0.3 - Максимальная скорость (риск ошибок)\n• 0.5-1.0 - Баланс скорости и надежности\n• 1.5-3.0 - Максимальная надежность', '0.5')); // Проверка и ограничение паузы if (isNaN(pauseInput) || pauseInput < 0.1) { pauseInput = 0.1; } else if (pauseInput > 3) { pauseInput = 3; } deletePause = pauseInput * 1000; test = confirm("⚡ НАСТРОЙКИ УДАЛЕНИЯ:\n\n• Год: " + targetYear + "\n• Пауза между удалениями: " + pauseInput + " сек." + "\n• Медиа заблокированы: Да\n\nНачать удаление?"); if (test) { console.log('⚡ ЗАПУСК С НАСТРОЕННЫМИ ПАРАМЕТРАМИ'); console.log('🎯 Целевой год: ' + targetYear); console.log('⏱️ Пауза между удалениями: ' + pauseInput + ' сек.'); createControlPanel(); startContinuousDeletion(); } } function startContinuousDeletion() { console.log('🔄 Начинаем непрерывное удаление...'); updateControlPanel(); processPostsContinuously(); } function processPostsContinuously() { if (!test) { console.log('⏸️ Скрипт на паузе'); return; } console.log(`\n=== ПОИСК ПОСТОВ ЗА ${targetYear} ГОД ===`); var posts = document.querySelectorAll('div._post'); console.log(`📊 На странице: ${posts.length} постов`); if (posts.length === 0) { console.log('📭 Постов не найдено, пытаемся загрузить...'); loadMorePosts().then((success) => { setTimeout(processPostsContinuously, 1000); }); return; } var postsToDelete = []; for (var i = 0; i < posts.length; i++) { var post = posts[i]; var postDate = extractDateFromPost(post); if (postDate && postDate.getFullYear() === targetYear) { postsToDelete.push({ element: post, date: postDate, index: i }); } } console.log(`🎯 Найдено постов за ${targetYear} год: ${postsToDelete.length}`); // Показываем информацию о найденных постах if (postsToDelete.length > 0) { console.log('📅 Даты найденных постов:'); postsToDelete.forEach(post => { console.log(' - ' + post.date.toLocaleDateString()); }); } if (postsToDelete.length > 0) { console.log('🔥 Начинаем удаление...'); deletePostsSequentially(postsToDelete, 0, () => { console.log(`✅ Удаление завершено. Всего удалено: ${count}`); updateControlPanel(); setTimeout(processPostsContinuously, 500); }); } else { console.log('📭 Постов за ' + targetYear + ' год не найдено, загружаем следующую страницу...'); loadMorePosts().then((success) => { setTimeout(processPostsContinuously, 1000); }); } } function loadMorePosts() { return new Promise((resolve) => { console.log('🔍 Поиск пагинации для загрузки следующей страницы...'); // Ищем кнопку "1" в пагинации (первая страница) var paginationButton = findPaginationButton(); if (paginationButton) { console.log('✅ Найдена кнопка пагинации, нажимаем...'); paginationButton.click(); console.log('⏳ Ждем загрузки новой страницы (3 секунды)...'); setTimeout(() => { // Прокручиваем немного для стимуляции загрузки window.scrollTo(0, 100); setTimeout(() => { console.log('✅ Новая страница загружена'); resolve(true); }, 1000); }, 3000); } else { console.log('❌ Кнопка пагинации не найдена, пробуем альтернативные методы...'); // Альтернативные методы загрузки var alternativeButtons = [ document.querySelector('#fw_load_more.pg_more_link'), document.querySelector('#wall_more_link'), document.querySelector('.wall_more_link'), document.querySelector('.pg_more_link'), findElementByText('к предыдущим постам') ]; var foundButton = alternativeButtons.find(btn => btn !== null); if (foundButton) { console.log('✅ Найдена альтернативная кнопка, нажимаем...'); foundButton.click(); console.log('⏳ Ждем загрузки постов (4 секунды)...'); setTimeout(() => { console.log('✅ Посты загружены через альтернативную кнопку'); resolve(true); }, 4000); } else { console.log('❌ Ни одна кнопка не найдена, используем прокрутку...'); var oldCount = document.querySelectorAll('div._post').length; window.scrollTo(0, 0); setTimeout(() => { window.scrollTo(0, document.body.scrollHeight); console.log('⏳ Ждем загрузки постов после прокрутки (5 секунд)...'); setTimeout(() => { var newCount = document.querySelectorAll('div._post').length; if (newCount > oldCount) { console.log(`✅ Загружено ${newCount - oldCount} постов через прокрутку`); resolve(true); } else { console.log('❌ Не удалось загрузить новые посты через прокрутку'); resolve(false); } }, 5000); }, 1000); } } }); } // Функция поиска кнопки пагинации "1" function findPaginationButton() { // Ищем все элементы пагинации var paginationContainers = [ document.querySelector('.pagination_page'), document.querySelector('.pagination_pages'), document.querySelector('.page_list'), document.querySelector('.pagination_list'), document.querySelector('[data-module="uiPagination"]'), document.querySelector('.ui_pagination') ]; // Ищем в контейнерах пагинации for (var container of paginationContainers) { if (container) { // Ищем кнопку с цифрой "1" var button = container.querySelector('a[href*="offset=0"], a[href*="page=1"], .pagination_page:first-child, .page:first-child'); if (button) return button; // Ищем по тексту "1" var buttons = container.querySelectorAll('a, span, .page, .pagination_page'); for (var btn of buttons) { if (btn.textContent && btn.textContent.trim() === '1') { return btn; } } } } // Ищем по всему документу ссылки с offset=0 var offsetLinks = document.querySelectorAll('a[href*="offset=0"]'); for (var link of offsetLinks) { if (link.textContent && link.textContent.trim() === '1') { return link; } } // Ищем любую кнопку с цифрой "1" в вероятных контейнерах пагинации var allButtons = document.querySelectorAll('a, span, .page, .pagination_page, .ui_pagination a'); for (var btn of allButtons) { if (btn.textContent && btn.textContent.trim() === '1' && (btn.href && btn.href.includes('wall') || btn.parentElement && btn.parentElement.className.includes('pagination'))) { return btn; } } return null; } function findElementByText(text) { var elements = document.querySelectorAll('a, span, div, button'); for (var i = 0; i < elements.length; i++) { var element = elements[i]; var elementText = element.textContent || element.innerText; if (elementText && elementText.trim() === text) { return element; } } return null; } function extractDateFromPost(postElement) { try { var dateElement = postElement.querySelector('.PostDateBlock__root'); if (dateElement) { var dateText = dateElement.textContent || dateElement.innerText; if (dateText) { return parseDateFromText(dateText); } } var likeWrap = postElement.querySelector('.like_wrap'); if (likeWrap) { var likeText = likeWrap.textContent || likeWrap.innerText; if (likeText) { return parseDateFromText(likeText); } } } catch (e) { return null; } return null; } function parseDateFromText(text) { if (!text) return null; text = text.replace(/\s+/g, ' ').trim(); var datePatterns = [ /(\d{1,2})\s+(янв|фев|мар|апр|май|июн|июл|авг|сен|окт|ноя|дек)\s+(\d{4})/i, /(\d{1,2})\s+(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)\s+(\d{4})/i ]; for (var pattern of datePatterns) { var match = text.match(pattern); if (match) { var day = parseInt(match[1]); var monthStr = match[2].toLowerCase(); var year = parseInt(match[3]); var months = { 'янв': 0, 'января': 0, 'фев': 1, 'февраля': 1, 'мар': 2, 'марта': 2, 'апр': 3, 'апреля': 3, 'май': 4, 'мая': 4, 'июн': 5, 'июня': 5, 'июл': 6, 'июля': 6, 'авг': 7, 'августа': 7, 'сен': 8, 'сентября': 8, 'окт': 9, 'октября': 9, 'ноя': 10, 'ноября': 10, 'дек': 11, 'декабря': 11 }; var month = months[monthStr]; if (month !== undefined) { return new Date(year, month, day); } } } return null; } function deletePostsSequentially(posts, currentIndex, callback) { if (currentIndex >= posts.length || test === false) { callback(); return; } var post = posts[currentIndex]; deleteSinglePost(post.element).then(() => { count++; console.log(`✅ Удален пост ${currentIndex + 1}/${posts.length}. Всего: ${count}`); // Используем настроенную пользователем паузу console.log(`⏱️ Ждем ${deletePause/1000} сек. перед следующим удалением...`); setTimeout(() => { deletePostsSequentially(posts, currentIndex + 1, callback); }, deletePause); }).catch((error) => { console.error('❌ Ошибка:', error); // При ошибке используем стандартную паузу 100мс setTimeout(() => { deletePostsSequentially(posts, currentIndex + 1, callback); }, 100); }); } function deleteSinglePost(postElement) { return new Promise((resolve, reject) => { try { var menuButton = postElement.querySelector('[data-testid="post_context_menu_toggle"]'); if (!menuButton) { reject('Кнопка меню не найдена'); return; } menuButton.click(); setTimeout(() => { var deleteButton = document.querySelector('[data-testid="post_context_menu_item_delete"]'); if (!deleteButton) { reject('Кнопка удаления не найдена'); return; } deleteButton.click(); setTimeout(() => { var confirmButton = document.querySelector('.vkuiButton--mode-primary'); if (confirmButton) { confirmButton.click(); } postElement.remove(); resolve(); }, 200); }, 200); } catch (error) { reject(error); } }); } function showFinalStats() { var message = `🎉 УДАЛЕНИЕ ЗАВЕРШЕНО!\n\n• Год: ${targetYear}\n• Удалено постов: ${count}\n• Пауза между удалениями: ${deletePause/1000} сек.`; alert(message); console.log(message); updateControlPanel(); } // Запускаем скрипт itit(); // КОМАНДЫ ДЛЯ УПРАВЛЕНИЯ: // - test = false // Остановить скрипт // - restartWithNewSettings() // Перезапуск с новыми настройками // - quickSettings() // Быстрые настройки паузы // - resetStopButton() // Сброс кнопки остановки
Как быстро удалить записи со стены «ВКонтакте»
Аватар автора комментария
Кирилл Тимонин2 часа назад

0 / 0

22.11.2025 - новая версия скрипта для автоматического удаления постов со стены ВК, учитывающая все изменения алгоритма удаления постов и интерфейса ВК. У скрипта есть удобное меню для управления процессом. Пред запуском скрипта необходимо войти в режим просмотра сообщений стены с выбором по календарю (двойной клик по слову Сообщения). Далее - выбираете год и дату в календаре, с которой начинать удалять сообщения - например 31 декабря 2023 года. Сообщения будут удаляться в прошлое - весь декабрь, ноябрь, октябрь и так далее. В меню скрипта нужно выбрать год - это служит предохранителем от случайного удаления текущих постов этого года. Скорость удаления постов от 0.1 до 3 секунд. Настраивать в зависимости от скорости вашего интернета и мощности компьютера. Для максимально быстрой работы скрипта необходимо в настройках браузера отключить показ картинок и видео. Скрипт успешно тестировался в браузере Хром на любых скоростях. Удаляет без ошибок. var test = false, count = 0, targetYear = 2024, deletePause = 100; var controlElements = {}; // Объект для хранения элементов управления // Функция создания панели управления function createControlPanel() { var panel = document.createElement('div'); panel.style.cssText = ` position: fixed; top: 20px; right: 20px; z-index: 10000; background: rgba(0,0,0,0.8); color: white; border-radius: 10px; padding: 15px; font-family: Arial, sans-serif; min-width: 200px; backdrop-filter: blur(10px); `; var title = document.createElement('div'); title.innerHTML = '🎯 Управление удалением'; title.style.cssText = 'font-weight: bold; margin-bottom: 10px; font-size: 16px;'; panel.appendChild(title); var stats = document.createElement('div'); stats.id = 'controlStats'; stats.innerHTML = `Год: ${targetYear}Удалено: ${count}Пауза: ${deletePause/1000}сек`; stats.style.cssText = 'margin-bottom: 10px; font-size: 12px; line-height: 1.4;'; panel.appendChild(stats); // Кнопка остановки/продолжения controlElements.stopBtn = document.createElement('button'); controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.cssText = ` background: #ff4444; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; margin-right: 5px; margin-bottom: 5px; width: 100%; `; controlElements.stopBtn.onclick = function() { if (test) { // Останавливаем скрипт test = false; controlElements.stopBtn.innerHTML = '▶️ Продолжить'; controlElements.stopBtn.style.background = '#44aa44'; console.log('⏸️ Скрипт приостановлен пользователем'); } else { // Продолжаем скрипт test = true; controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; console.log('▶️ Скрипт продолжен пользователем'); // Запускаем процесс снова setTimeout(() => { processPostsContinuously(); }, 100); } updateControlPanel(); }; panel.appendChild(controlElements.stopBtn); // Кнопка перезапуска var restartBtn = document.createElement('button'); restartBtn.innerHTML = '🔄 Перезапустить'; restartBtn.style.cssText = ` background: #44aaff; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; margin-bottom: 5px; width: 100%; `; restartBtn.onclick = function() { test = false; console.log('🔄 Перезапуск скрипта...'); // Сбрасываем кнопку остановки к красному цвету if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; } setTimeout(() => { restartWithNewSettings(); }, 500); }; panel.appendChild(restartBtn); // Кнопка быстрых настроек var settingsBtn = document.createElement('button'); settingsBtn.innerHTML = '⚙️ Быстрые настройки'; settingsBtn.style.cssText = ` background: #ffaa00; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; width: 100%; `; settingsBtn.onclick = function() { quickSettings(); }; panel.appendChild(settingsBtn); document.body.appendChild(panel); return panel; } // Функция сброса кнопки остановки при перезапуске function resetStopButton() { if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; } } // Функция обновления панели управления function updateControlPanel() { var stats = document.getElementById('controlStats'); if (stats) { stats.innerHTML = `Год: ${targetYear}Удалено: ${count}Пауза: ${deletePause/1000}секСтатус: ${test ? 'активен' : 'пауза'}`; } } // Функция быстрых настроек function quickSettings() { if (test) { alert('Сначала остановите скрипт для изменения настроек!'); return; } var newPause = parseFloat(prompt('Новая пауза между удалениями (секунды):\n\n0.1-0.3 - Максимальная скорость\n0.5-1.0 - Баланс\n1.5-3.0 - Максимальная надежность', deletePause/1000)); if (!isNaN(newPause) && newPause >= 0.1 && newPause <= 3) { deletePause = newPause * 1000; console.log('⚙️ Пауза изменена: ' + newPause + ' сек.'); updateControlPanel(); } else { alert('Некорректное значение паузы!'); } } // Функция перезапуска с новыми настройками function restartWithNewSettings() { // Сбрасываем счетчик count = 0; // Запрос года для удаления var currentYear = new Date().getFullYear(); var newTargetYear = parseInt(prompt('Введите год, посты за который нужно удалить\n(например: 2024, 2023, 2022)', targetYear)); // Проверка корректности года if (isNaN(newTargetYear) || newTargetYear < 2000 || newTargetYear > currentYear) { alert('Некорректный год! Будет использован предыдущий год: ' + targetYear); } else { targetYear = newTargetYear; } // Настройка паузы между удалениями var pauseInput = parseFloat(prompt('Пауза между удалениями постов (секунды)\n\nРекомендации:\n• 0.1-0.3 - Максимальная скорость (риск ошибок)\n• 0.5-1.0 - Баланс скорости и надежности\n• 1.5-3.0 - Максимальная надежность', deletePause/1000)); // Проверка и ограничение паузы if (isNaN(pauseInput) || pauseInput < 0.1) { pauseInput = 0.1; } else if (pauseInput > 3) { pauseInput = 3; } deletePause = pauseInput * 1000; test = confirm("⚡ НОВЫЕ НАСТРОЙКИ УДАЛЕНИЯ:\n\n• Год: " + targetYear + "\n• Пауза между удалениями: " + pauseInput + " сек." + "\n• Медиа заблокированы: Да\n\nНачать удаление с новыми настройками?"); if (test) { console.log('🔄 ПЕРЕЗАПУСК С НОВЫМИ НАСТРОЙКАМИ'); console.log('🎯 Целевой год: ' + targetYear); console.log('⏱️ Пауза между удалениями: ' + pauseInput + ' сек.'); // Сбрасываем кнопку остановки к красному цвету resetStopButton(); updateControlPanel(); startContinuousDeletion(); } else { updateControlPanel(); } } // Остановка по клавише ESC document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && test) { test = false; if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '▶️ Продолжить'; controlElements.stopBtn.style.background = '#44aa44'; } console.log('⏸️ Скрипт приостановлен по клавише ESC'); updateControlPanel(); } }); function disableMediaLoading() { document.querySelectorAll('img, video, iframe').forEach(el => { el.style.display = 'none'; }); const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.nodeType === 1) { if (node.tagName === 'IMG' || node.tagName === 'VIDEO') { node.style.display = 'none'; } node.querySelectorAll?.('img, video').forEach(media => { media.style.display = 'none'; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); console.log('⚡ Медиа заблокированы'); } function itit() { disableMediaLoading(); // Запрос года для удаления var currentYear = new Date().getFullYear(); targetYear = parseInt(prompt('Введите год, посты за который нужно удалить\n(например: 2024, 2023, 2022)', currentYear)); // Проверка корректности года if (isNaN(targetYear) || targetYear < 2000 || targetYear > currentYear) { alert('Некорректный год! Будет использован текущий год: ' + currentYear); targetYear = currentYear; } // Точная настройка паузы между удалениями var pauseInput = parseFloat(prompt('Пауза между удалениями постов (секунды)\n\nРекомендации:\n• 0.1-0.3 - Максимальная скорость (риск ошибок)\n• 0.5-1.0 - Баланс скорости и надежности\n• 1.5-3.0 - Максимальная надежность', '0.5')); // Проверка и ограничение паузы if (isNaN(pauseInput) || pauseInput < 0.1) { pauseInput = 0.1; } else if (pauseInput > 3) { pauseInput = 3; } deletePause = pauseInput * 1000; test = confirm("⚡ НАСТРОЙКИ УДАЛЕНИЯ:\n\n• Год: " + targetYear + "\n• Пауза между удалениями: " + pauseInput + " сек." + "\n• Медиа заблокированы: Да\n\nНачать удаление?"); if (test) { console.log('⚡ ЗАПУСК С НАСТРОЕННЫМИ ПАРАМЕТРАМИ'); console.log('🎯 Целевой год: ' + targetYear); console.log('⏱️ Пауза между удалениями: ' + pauseInput + ' сек.'); createControlPanel(); startContinuousDeletion(); } } function startContinuousDeletion() { console.log('🔄 Начинаем непрерывное удаление...'); updateControlPanel(); processPostsContinuously(); } function processPostsContinuously() { if (!test) { console.log('⏸️ Скрипт на паузе'); return; } console.log(`\n=== ПОИСК ПОСТОВ ЗА ${targetYear} ГОД ===`); var posts = document.querySelectorAll('div._post'); console.log(`📊 На странице: ${posts.length} постов`); if (posts.length === 0) { console.log('📭 Постов не найдено, пытаемся загрузить...'); loadMorePosts().then((success) => { setTimeout(processPostsContinuously, 1000); }); return; } var postsToDelete = []; for (var i = 0; i < posts.length; i++) { var post = posts[i]; var postDate = extractDateFromPost(post); if (postDate && postDate.getFullYear() === targetYear) { postsToDelete.push({ element: post, date: postDate, index: i }); } } console.log(`🎯 Найдено постов за ${targetYear} год: ${postsToDelete.length}`); // Показываем информацию о найденных постах if (postsToDelete.length > 0) { console.log('📅 Даты найденных постов:'); postsToDelete.forEach(post => { console.log(' - ' + post.date.toLocaleDateString()); }); } if (postsToDelete.length > 0) { console.log('🔥 Начинаем удаление...'); deletePostsSequentially(postsToDelete, 0, () => { console.log(`✅ Удаление завершено. Всего удалено: ${count}`); updateControlPanel(); setTimeout(processPostsContinuously, 500); }); } else { console.log('📭 Постов за ' + targetYear + ' год не найдено, загружаем следующую страницу...'); loadMorePosts().then((success) => { setTimeout(processPostsContinuously, 1000); }); } } function loadMorePosts() { return new Promise((resolve) => { console.log('🔍 Поиск пагинации для загрузки следующей страницы...'); // Ищем кнопку "1" в пагинации (первая страница) var paginationButton = findPaginationButton(); if (paginationButton) { console.log('✅ Найдена кнопка пагинации, нажимаем...'); paginationButton.click(); console.log('⏳ Ждем загрузки новой страницы (3 секунды)...'); setTimeout(() => { // Прокручиваем немного для стимуляции загрузки window.scrollTo(0, 100); setTimeout(() => { console.log('✅ Новая страница загружена'); resolve(true); }, 1000); }, 3000); } else { console.log('❌ Кнопка пагинации не найдена, пробуем альтернативные методы...'); // Альтернативные методы загрузки var alternativeButtons = [ document.querySelector('#fw_load_more.pg_more_link'), document.querySelector('#wall_more_link'), document.querySelector('.wall_more_link'), document.querySelector('.pg_more_link'), findElementByText('к предыдущим постам') ]; var foundButton = alternativeButtons.find(btn => btn !== null); if (foundButton) { console.log('✅ Найдена альтернативная кнопка, нажимаем...'); foundButton.click(); console.log('⏳ Ждем загрузки постов (4 секунды)...'); setTimeout(() => { console.log('✅ Посты загружены через альтернативную кнопку'); resolve(true); }, 4000); } else { console.log('❌ Ни одна кнопка не найдена, используем прокрутку...'); var oldCount = document.querySelectorAll('div._post').length; window.scrollTo(0, 0); setTimeout(() => { window.scrollTo(0, document.body.scrollHeight); console.log('⏳ Ждем загрузки постов после прокрутки (5 секунд)...'); setTimeout(() => { var newCount = document.querySelectorAll('div._post').length; if (newCount > oldCount) { console.log(`✅ Загружено ${newCount - oldCount} постов через прокрутку`); resolve(true); } else { console.log('❌ Не удалось загрузить новые посты через прокрутку'); resolve(false); } }, 5000); }, 1000); } } }); } // Функция поиска кнопки пагинации "1" function findPaginationButton() { // Ищем все элементы пагинации var paginationContainers = [ document.querySelector('.pagination_page'), document.querySelector('.pagination_pages'), document.querySelector('.page_list'), document.querySelector('.pagination_list'), document.querySelector('[data-module="uiPagination"]'), document.querySelector('.ui_pagination') ]; // Ищем в контейнерах пагинации for (var container of paginationContainers) { if (container) { // Ищем кнопку с цифрой "1" var button = container.querySelector('a[href*="offset=0"], a[href*="page=1"], .pagination_page:first-child, .page:first-child'); if (button) return button; // Ищем по тексту "1" var buttons = container.querySelectorAll('a, span, .page, .pagination_page'); for (var btn of buttons) { if (btn.textContent && btn.textContent.trim() === '1') { return btn; } } } } // Ищем по всему документу ссылки с offset=0 var offsetLinks = document.querySelectorAll('a[href*="offset=0"]'); for (var link of offsetLinks) { if (link.textContent && link.textContent.trim() === '1') { return link; } } // Ищем любую кнопку с цифрой "1" в вероятных контейнерах пагинации var allButtons = document.querySelectorAll('a, span, .page, .pagination_page, .ui_pagination a'); for (var btn of allButtons) { if (btn.textContent && btn.textContent.trim() === '1' && (btn.href && btn.href.includes('wall') || btn.parentElement && btn.parentElement.className.includes('pagination'))) { return btn; } } return null; } function findElementByText(text) { var elements = document.querySelectorAll('a, span, div, button'); for (var i = 0; i < elements.length; i++) { var element = elements[i]; var elementText = element.textContent || element.innerText; if (elementText && elementText.trim() === text) { return element; } } return null; } function extractDateFromPost(postElement) { try { var dateElement = postElement.querySelector('.PostDateBlock__root'); if (dateElement) { var dateText = dateElement.textContent || dateElement.innerText; if (dateText) { return parseDateFromText(dateText); } } var likeWrap = postElement.querySelector('.like_wrap'); if (likeWrap) { var likeText = likeWrap.textContent || likeWrap.innerText; if (likeText) { return parseDateFromText(likeText); } } } catch (e) { return null; } return null; } function parseDateFromText(text) { if (!text) return null; text = text.replace(/\s+/g, ' ').trim(); var datePatterns = [ /(\d{1,2})\s+(янв|фев|мар|апр|май|июн|июл|авг|сен|окт|ноя|дек)\s+(\d{4})/i, /(\d{1,2})\s+(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)\s+(\d{4})/i ]; for (var pattern of datePatterns) { var match = text.match(pattern); if (match) { var day = parseInt(match[1]); var monthStr = match[2].toLowerCase(); var year = parseInt(match[3]); var months = { 'янв': 0, 'января': 0, 'фев': 1, 'февраля': 1, 'мар': 2, 'марта': 2, 'апр': 3, 'апреля': 3, 'май': 4, 'мая': 4, 'июн': 5, 'июня': 5, 'июл': 6, 'июля': 6, 'авг': 7, 'августа': 7, 'сен': 8, 'сентября': 8, 'окт': 9, 'октября': 9, 'ноя': 10, 'ноября': 10, 'дек': 11, 'декабря': 11 }; var month = months[monthStr]; if (month !== undefined) { return new Date(year, month, day); } } } return null; } function deletePostsSequentially(posts, currentIndex, callback) { if (currentIndex >= posts.length || test === false) { callback(); return; } var post = posts[currentIndex]; deleteSinglePost(post.element).then(() => { count++; console.log(`✅ Удален пост ${currentIndex + 1}/${posts.length}. Всего: ${count}`); // Используем настроенную пользователем паузу console.log(`⏱️ Ждем ${deletePause/1000} сек. перед следующим удалением...`); setTimeout(() => { deletePostsSequentially(posts, currentIndex + 1, callback); }, deletePause); }).catch((error) => { console.error('❌ Ошибка:', error); // При ошибке используем стандартную паузу 100мс setTimeout(() => { deletePostsSequentially(posts, currentIndex + 1, callback); }, 100); }); } function deleteSinglePost(postElement) { return new Promise((resolve, reject) => { try { var menuButton = postElement.querySelector('[data-testid="post_context_menu_toggle"]'); if (!menuButton) { reject('Кнопка меню не найдена'); return; } menuButton.click(); setTimeout(() => { var deleteButton = document.querySelector('[data-testid="post_context_menu_item_delete"]'); if (!deleteButton) { reject('Кнопка удаления не найдена'); return; } deleteButton.click(); setTimeout(() => { var confirmButton = document.querySelector('.vkuiButton--mode-primary'); if (confirmButton) { confirmButton.click(); } postElement.remove(); resolve(); }, 200); }, 200); } catch (error) { reject(error); } }); } function showFinalStats() { var message = `🎉 УДАЛЕНИЕ ЗАВЕРШЕНО!\n\n• Год: ${targetYear}\n• Удалено постов: ${count}\n• Пауза между удалениями: ${deletePause/1000} сек.`; alert(message); console.log(message); updateControlPanel(); } // Запускаем скрипт itit(); // КОМАНДЫ ДЛЯ УПРАВЛЕНИЯ: // - test = false // Остановить скрипт // - restartWithNewSettings() // Перезапуск с новыми настройками // - quickSettings() // Быстрые настройки паузы // - resetStopButton() // Сброс кнопки остановки
Как быстро удалить записи со стены «ВКонтакте»
Задача — дойти до школы самому: как подготовить ребёнка и убедиться, что всё будет в порядке&nbsp;

Задача — дойти до школы самому: как подготовить ребёнка и убедиться, что всё будет в порядке  

Лайфхакер
Информация
О проектеРубрикиРекламаРедакцияВакансииДля начинающих авторовО компании
Подписка
TelegramВКонтактеTwitterViberYouTubeИнициалRSS
Правила
Пользовательское соглашениеПолитика обработки персональных данныхПравила применения рекомендательных технологийПравила сообществаСогласие на обработку персональных данныхСогласие для рекламных рассылокСогласие для информационной программы
18+Копирование материалов запрещено.
Издание может получать комиссию от покупки товаров, представленных в публикациях