-2
public void Button1_Click_1(object sender, EventArgs e)
{

var page = GetHtmlPage("https://market.yandex.ru/product--videokarta-msi-geforce-rtx-2080-1515mhz-pci-e-3-0-8192mb-14000mhz-256-bit-3xdisplayport-hdmi-hdcp-gaming-x-trio/158327341");

var pos = page.IndexOf("n-product-price-cpa2__price");
char ch1 = page[pos + 5];
label6.Text = ch1.ToString();
}

Пытаюсь получить значение после определенного текста в html коде страницы. page.IndexOf почему-то выдает -1, хотя на тестовой строке, содержащую нужный фрагмент все правильно определялось.

  • вы как то чем то что то получаете и у вас какой то текст в этом что то не находится. Тут недостаточно информации чтобы помогать. – tym32167 Nov 24 '19 at 18:02
  • все правильно выводит, в коде страницы нет такого текста – Exploding Kitten Nov 24 '19 at 18:24
  • @eXit, есть, я от туда и скопировал данный фрагмент:/ – Штеуд Бой Nov 24 '19 at 18:29
  • то, что он у вас есть на странице в данный момент, не означает, что он появляется при загрузке, это может быть какой-то динамический стиль или id , который появляется позже (после клика куда-то), но при закрузке странице его нет – Exploding Kitten Nov 24 '19 at 18:30
  • @eXit, это статический класс, появляется сразу после загрузки – Штеуд Бой Nov 24 '19 at 18:31
  • Хм, почему же у меня находит позицию? Тут либо вы что то пишете не так и в page у вас фиг пойми что, либо у сайта есть какие то механизмы, которые отдают разные данные разным странам/устройствам итд (что вряд-ли). Ну а вообще... – EvgeniyZ Nov 24 '19 at 18:36

1 Answers1

0

Возьмите CefSharp и вытяните цену используя JavaScript. Это делается одной строчкой

document.querySelector(".n-product-price-cpa2__price>span").innerText

введите сюда описание изображения

Яндекс Маркет - прогрессивное веб-приложение, написанное на React. Вполне вероятно, что фрагмент с ценой рендерится на клиенте, а не на сервере.

  • Ужасное решение. Это как бить по воробьям зенитным орудием. Хоть и решение... – EvgeniyZ Nov 24 '19 at 18:38
  • @EvgeniyZ А JavaScript, наверное, ужасный язык... Парсить React приложение как текст это ужасное решение. Вы точно не застряли в 2000-x? – Трипольский Пётр Nov 24 '19 at 18:48
  • Современные web интерфейсы работают по типу отправки WebAPI запросов на определенный адрес, которые в ответ дают простейший JSON. Либо там сокеты (редко, но бывают). Достаточно написать запрос "Ей яндекс, у тебя по адресу ... есть такие то данные, вот кука, которая подтверждает, что я человек и вот параметры запроса, дай пожалуйста данные", все, пару строк кода и все данные без доп библиотек у вас кармане. Вы же тащите целый браузер, который выполнит, отрендерит и потом выдаст нужный результат. Ну давайте ездить на танке в магазин теперь, практично, пробок избежим зато!) – EvgeniyZ Nov 24 '19 at 18:52
  • А вот вам и доказательства: Get запрос на адрес https://market.yandex.ru/api/reviews/product/158327341?pageId=market%3Aproduct, в ответ получаем такой JSON и как видите там все необходимые данные о товаре, включая цену. Всего 1 запрос, даже HTML парсить не нужно... – EvgeniyZ Nov 24 '19 at 18:58