Загрузка...

Script
How to parse the golden apple?

Thread in Python created by templerunner Jan 4, 2026. 395 views

  1. templerunner
    templerunner Topic starter Jan 4, 2026 1 Jul 14, 2022
    Ключевая цель спарсить не абы что на поверхности лежащее, а наличие товаров по категориям и гео.
    Для отправки запросов на целевой эндпоинт в промышленных масштабах нехватает x-gib токенов, требующихся для каждого исходящего запроса. Сейчас эти токены добываются через selenium: браузер имитирует действия пользователя, в процессе дергаются нужные эндпоинты, а парсер перехватывает и сохраняет выданные токены. В дальнейшем они используются для прямых запросов к эндпоинту наличия товаров.

    Проблема в том, что такой подход плохо масштабируется:
    токенов получается мало, селениум сильно нагружает CPU, и в итоге этим способом не удаётся собирать достаточный объём данных в сутки

    Если для вас эта задача уровня «раз плюнуть», буду очень благодарен за направление мысли или короткое напутствие
    Код покупать не могу (проект некоммерческий, бюджет = 0), но сам уже покопался и упёрся в конкретное место
    Любая подсказка даже в пару строк сильно поможет, заранее спасибо тем, кто откликнется
     
  2. xusd
    xusd Jan 4, 2026 259 Dec 11, 2024


    Вот в этом JS скорее всего идет генерация этих хидеров, закидываешь его в webcrack для лучшей читаймости
    https://webcrack.netlify.app/

    И смотришь что и где, для простоты оверрайдишь их джс на тот что тебе выдал вебкрак и ставишь брейкпоинты на интересные места в дебаггере хрома.
     
  3. templerunner
    templerunner Topic starter Jan 4, 2026 1 Jul 14, 2022
    Спасибо большое, попробую.
     
  4. Lebowsky13
    Lebowsky13 Jan 4, 2026 14 Mar 25, 2025
    К сожалению пощупать и посмотреть сам сайт в данный момент не могу, но вижу человек выше описал решение, скорее всего так и есть, могу подсказать библиотеку js2py , если там в JS генерируется токен, то сможешь попробовать его вызвать через эту либу.
     
    1. templerunner Topic starter
      avatarLebowsky13, [IMG]разбираю js файл, не без помощи нейронки. Загрузил в контекст все что связано с генерацией x-gib токенов, гпт говорит что первичный токен генерируется на стороне бэкенда, мол не получится выполнить джаваскрипт и получить валидный токен. Могу ошибаться
    2. Lebowsky13
      avatartemplerunner, не важно где он генерируется, ты же думай как юзер обычный, ты заходишь на страницу, и сразу автоматом генерит разные токены, а потом в зависимости от действий они передаются в запрос. Тебе нужно узнать в каком именно месте и когда он генерируется и куда пишется это значение, и тогда ты сможешь его спарсить.
      Не забывай передавать все остальные токены и куки, при каждом запросе, тебе нужно максимально имитировать юзера, как это делает Selenium
  5. NingaGo
    Приветствую, все, что я выяснил:

    x-gib-fgsscw-goldapple получается посредством этой формулы:
    JS
    fgssc = i + SHA1( Ua + gssc + i ).slice(4)
    где i - это короткая случайная строка из 4 символов[IMG]
    Ua - соль, константа [IMG]
    gssc - сам gssc токен, который приходит из backend в заголовке: set-cookie: [IMG]

    Ниже сама функция, где все это происходит:

    [IMG]
    e - сам gssc токен, он берется из куки-хранилища или используется какое-то другое значение (qa). Я думаю, что это "другое значение" есть gssc токен, который приходит из бэкенда, если вдруг в куки хранилище его нету.

    [IMG]
    само выражение
    JS
    e.UxCAT("gssc", et.v(t(624, "hTId")))
    можно записать как "gsscw-goldapple" , и будет:

    JS
    var c, d, u, p, m, g, f, y = ba.get("gsscw-goldapple") || qa
    Ниже простой код для генерации fsscw токена или подписи, называйте как хотите.


    JS
    import crypto from "crypto";

    function genFgssc(GSSC) {
    const s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    const i = Array.from({length:4}, () => s[Math.floor(Math.random()*s.length)]).join("");
    const Ua = "shgkla34ty3gg354g34wf";

    const hash = crypto.createHash("sha1").update(Ua + GSSC + i, "utf8").digest("hex").slice(4);

    return i + hash;
    }

    const res = genFgssc("GSSC_SIGN")

    console.log(res)
     
    1. templerunner Topic starter
      Большое спасибо avatarNingaGo и всем, кто подключился к теме и помог. Разобрался, всё получилось
      Jan 7, 2026 Edited
Loading...