0

Пришел с таким вопросом. Мне нужно получить корзину стима, но при переходе на https://store.steampowered.com/cart у меня ничего не отображается, хотя в корзине есть товары. Вот пример кода, который использую

private async Task GetCart(IEnumerable<Cookie> cookies)
    {
        var cartUrl = "https://store.steampowered.com/cart";
    var cookieContainer = new CookieContainer();
    var handler = new HttpClientHandler() { CookieContainer = cookieContainer};
    handler.UseCookies = true;

    using (var client = new HttpClient(handler))
    {

        foreach (var cookie in cookies)
        {
            cookieContainer.Add(new Uri(cartUrl), cookie);
        }


        var response = await client.GetAsync(cartUrl);

        var s = await response.Content.ReadAsStringAsync();

        Console.WriteLine(&quot;Запрос прошел успешно!&quot;);
    }

}

в s складываю полученый html документ. По идее, все куки собираю и отправляю с запросом. Пробовал в Postman - e прокинуть такой запрос - результат один и тот-же. Куки все указывал при запросе. Он показывает, что за пользователь и счет

  • Читайте это, поймете что в HTML (интерфейсе) мало кто хранит данные, а вы их сейчас упорно пытаетесь от туда получить) – EvgeniyZ Mar 06 '24 at 14:44
  • https://ru.stackoverflow.com/a/1217351/373567 – aepot Mar 06 '24 at 19:23

1 Answers1

0

Хочу выразить благодарность EvgeniyZ, что показал, в каком направлении копать. Смотрите, те, кто тоже столкнулся с такой проблемой, есть библиотека Selenium WebDriver. Она эмулирует работу браузера и дожидается полной загрузки страницы.Вот, как выглядит

private async Task GetCart(IEnumerable<System.Net.Cookie> cookies)
    {
        var chromeOptions = new ChromeOptions();
        chromeOptions.AddArgument("--headless"); // Опционально: запуск браузера в фоновом режиме
        using (var driver = new ChromeDriver(chromeOptions))
        {
            var cartUrl = "https://store.steampowered.com/cart";
        driver.Navigate().GoToUrl(&quot;https://store.steampowered.com&quot;);

        // Добавление cookies
        foreach (var cookie in cookies)
        {
            driver.Manage().Cookies.AddCookie(new OpenQA.Selenium.Cookie(cookie.Name, cookie.Value));
        }

        driver.Navigate().GoToUrl(cartUrl);

        var pageSource = driver.PageSource;

        Console.WriteLine(&quot;Запрос прошел успешно!&quot;);
    }
}

в pageSource вернулась полностью прогруженная страница

  • 1
    Вы серьезно?) Я вам не то направление давал. Я вам ведь прямым текстом сказал, что данные надо не в UI (HTML) смотреть, а просить у сервера. Но вы опять упорно пробуете взять из UI данные, еще и целый браузер используете... Почему? Зачем? Как вообще до такого дошли? Ну вот я добавляю что-то в корзину, перехожу по указанной ссылке, вижу запросы, где сразу первый GET запрос мне отдает JSON с кол-вом товаров в корзине и их ID. Еще чуть ниже используется Steam API, который дает уже информацию о товаре (V1 на скрине), но нет, лучше ведь браузер, да? – EvgeniyZ Mar 06 '24 at 16:47
  • Соглашусь, что это немного не то, что было описано в вашей статье. Данным способом я еще закрыл некоторые дыры, которые требовали уже полностью прогруженной страницы) Я отметнул данный способ из-за того, что браузер в json показывал только один id игры, хотя в корзине было 3) После очистки кэша он отдавл нормаьлный json – Dr. Deckto Mar 06 '24 at 17:40
  • @EvgeniyZ Ну как, в противоположную сторону я ушел) Но я хоть понял, что и как лучше искать. Тоже спасибо за такой пинок – Dr. Deckto Mar 06 '24 at 17:53
  • 2
    Данным способом я еще закрыл некоторые дыры - ну это плохо ведь. Я помню делал полноценного бота для стима с полноценной авторизацией, 2FA, мониторингом запросов трейда и так далее - все без проблем делалось на чистых запросах, без браузера. Так что, подумайте, верный путь вы выбрали и стоит-ли в проект добавлять самый прожорливый по RAM компонент, или всеж можно сделать проект на пару мегабайт, без лишних компонентов, без браузера. Тут конечно ваш проект, делайте как считаете нужно, но задуматься стоит. – EvgeniyZ Mar 06 '24 at 18:36