Парсинг позиций товаров по запросу Wildberries
Еще недавно парсинг позиций не вызывал никаких проблем, по обычному запросу search.wb.ru/exactmatch/ru/common/v... отображались все товары и их позиции, с рекламными данными (log и logs, где перечислялась рекламная позиция, cpm и прочее).
С недавних пор ВБ ужесточил политику, связанную с рекламными данными и добавил анти-бот систему. Судя по моим наблюдениям - система связана с одним, конкретным, хедером x-pow
Вот конкретный пример с рабочим x-pow (у него, судя по всему, короткое время жизни)
const resp = await httpGetWithRetry(url, {
headers: {
"Accept": "*/*",
"Accept-Language": "ru,en;q=0.9,en-GB;q=0.8,en-US;q=0.7",
"Origin": "https://www.wildberries.ru",
"Referer": "https://www.wildberries.ru/catalog/0/search.aspx?search=" + encodeURIComponent(query),
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0",
"x-pow": "2|site_e73e953d7c85460891f8ac6d7b72ccc9|1761337855|6,8,1,6566ca000000000,25d5428f-35ee-4066-a07b-8018affb9417,8f62c52e-b3d2-46e3-a307-c9e71508e686,1761337912,1,yJxTDStTwwYu20+iETlh4TrGWeR2uqYgJ3DkFVBg5vk=,c7f733386fb4cb95f6547664cb1d4490f5f7009d90a63946b2f9bd0e776a486928b90f3eda4fa954ea574e06d43784774a4e60235e8ac05d5263a7075f15b20e|30",
"x-queryid": "qid" + Date.now(),
"x-userid": "0",
"priority": "u=1, i"
},
signalParent
});
Если убрать этот параметр, или проверить через время - ответ выглядит совершенно по другому. Если кто-нибудь сталкивался с этим и знает, как обойти, (вариант с puppeteer не хочу рассматривать, т.к. время выполнения увеличиться многократно для каждого запроса) буду очень рад услышать хоть что то :)
Ответы (1 шт):
Они начали защищаться.
Пример кода для вдохновения:
const puppeteer = require('puppeteer');
async function getPowToken() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.wildberries.ru');
await page.waitForNavigation({waitUntil: 'networkidle0'});
await page.waitForFunction(() => {
return localStorage.getItem('session-pow-token') !== null;
}, {
timeout: 5000
});
let token = await page.evaluate(() => {
return localStorage.getItem('session-pow-token')
});
console.log('Token:', token)
await browser.close();
}
getPowToken();
Можно на его основе в фоне не спеша обновлять x-pow значения, а парсерами использовать его. Пока что защита крайне примитивная.