Массовое удаление товаров из Яндекс.Маркета

Комментариев: 6

Как говориться, умом Россию не понять...В чём прикол удалять товары из маркета по одному? Даже представить не мог, что такое может быть....

Ребят, сразу скажу, что решение, которое я накидал довольно медленное и конечно, можно сделать намного бодрее, но это нужно думать, делать, а мне лень. Поэтому, кому нужно, забирайте.

Работает на NodeJS + puppeteer. (Для тех кто не в курсе, нужно установить NodeJS, затем установить puppeteer и затем запустить скрипт командой: node scriptname.js

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

"use strict";
const fs = require("fs");
const puppeteer = require('puppeteer');


(async () => {
	
  const browser = await puppeteer.launch({
     headless: false,
	  ignoreHTTPSErrors:true,
     args: [
		'--no-sandbox',
		'--disable-setuid-sandbox',
		'--ignore-certificate-errors',
		],
  })


const page = await browser.newPage();

await page.goto('https://passport.yandex.ru/auth/list?mode=auth&retpath=https://partner.market.yandex.ru/businesses')
await page.setViewport({ width: 1280, height: 720 })

//Авторизация и переход в каталог товаров
await page.waitForSelector('input[name=login]')
//Указываем логин
await page.type('input[name=login]', 'ваш-логин')
await page.click('button[type=submit]')
await page.waitForSelector('input[name=passwd]')
//Указываем пароль
await page.type('input[name=passwd]', 'ваш-пароль')
await page.click('button[type=submit]')
await page.waitForSelector('.___Tag___vy-iL')
//Вот в этой ссылке поменяйте ID
await page.goto('https://partner.market.yandex.ru/supplier/ваш-ID/assortment')

//Теперь собственно проходимcя циклом для удаление товаров

var step;
for (step = 0; step < 3162; step++) {
	await page.waitForSelector('.___Clickable___1oWwf')
	await page.click('.___tr___2UBvk .___Isvg___2UB1a > path')
	await page.waitForSelector('.___container___1cGP9')
	await page.click('.style-optionList___11bSK > li > .___Tag___2u0HH > .___Clickable___1D_dS > span[data-e2e-i18n-key="pages.assortment:offer-control-delete"]')
	await page.waitForSelector('span[data-e2e-i18n-key="pages.assortment:delete-offer-confirm"]')
	await page.click('span[data-e2e-i18n-key="pages.assortment:delete-offer-confirm"]')
	await page.waitForSelector('.___content___2OfNu');
	await page.reload({ waitUntil: ["networkidle0", "domcontentloaded"] });
  console.log('Удалено: ' + step);
}
await browser.close()

})()
Уведомлять о новых комментариях
Уведомлять
guest
6 комментариев
Inline Feedbacks
View all comments
Иван
Иван
6 месяцев назад

Не получилось, ругается на строку
await page.waitForSelector(‘.___Tag___vy-iL’)
Заменил на строку
await page.waitForSelector(‘.___Tag___3JuNA’)
При выполнении стал проваливаться в каталог, а там дальше в цикле вообще не пойму ругается на все троки, где указано больше одной строки.
Вот так ‘.___Clickable___1oWwf’ нормально.
Так ‘.___tr___2UBvk .___Isvg___2UB1a > path’ ошибка. not found selector

Иван
Иван
6 месяцев назад

Помогите пожалуйста. Довести до ума скрипт. Там такая фишка, что при удалении товар может встать в статус проверка и когда проверка закончится он будет удалён.

Иван
Иван
6 месяцев назад
Reply to  Иван

Вот текст ошибки

230x230 (2).jpg
Иван
Иван
6 месяцев назад

«.___Isvg___2UB1a» нету.
Если не сложно, напишите пожалуйста, как кнопку нажимать и как выбирать из списка действий Удалить.