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

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

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

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

Работает на 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
9 комментариев
Inline Feedbacks
View all comments
Иван
Иван
11 месяцев назад

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

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

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

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

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

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

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

Илья
Илья
1 месяц назад
Reply to  Иван

«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’, {app: ‘google chrome’}) 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]’, {delay: 1000}) await page.waitForTimeout(1000) //ссылка на каталог с параметрами, заменить на свою await page.goto(‘https://partner.market.yandex.ru/supplier/257654528979/assortment?activeTab=offers&placement=CURRENT&supplyPlan=2%2C3&marketCategory=91011&offerStatus=999&id=25765452&pageSize=50’, {delay: 1000}) var step; for (step = 0; step < 3162; step++) { await page.waitForSelector(‘.___root_1dsct_1 >… Читать далее »

qwe
qwe
3 месяцев назад

Подскажите пожалуйста, может есть пример удаление 1 карточки через командную строку ?