Получить информацию с веб-страницы

Мне нужно написать код С# для захвата содержимого веб-страницы. Шаги выглядят следующим образом

  1. Перейдите на страницу логин
  2. У меня есть имя пользователя и пароль, предоставьте его программно и войдите в систему
  3. Тогда вы находитесь на странице подробностей
  4. Вы должны получить некоторую информацию, например (идентификатор продукта, Des и т. д.)
  5. Затем нужно нажать (по коду) на Подробный просмотр.
  6. Затем вы можете получить оттуда цену на этот продукт.
  7. Теперь это сделано, поэтому мы можем записать строку сведений в текстовый файл следующим образом... ABC Printer::225519::285.00

Пожалуйста, помогите мне в этом (даже код VB.Net в порядке, я могу преобразовать его в С#)


person Buddhi Dananjaya    schedule 10.12.2010    source источник
comment
Вам действительно нужно щелкнуть на шаге 5 или достаточно просто получить URL-адрес новой страницы, а затем загрузить ее?   -  person CodesInChaos    schedule 10.12.2010


Ответы (4)


Вероятно, вам нужна библиотека WatiN. По сути, он управляет веб-браузером (я полагаю, что встроенная поддержка IE и Firefox, хотя они, возможно, добавили больше с тех пор, как я в последний раз использовал его) и предоставляет простой синтаксис для программного взаимодействия с элементами страницы в этом браузере. Все, что вам нужно, это имена и/или идентификаторы этих элементов или какой-то уникальный способ идентифицировать их на странице.

person David    schedule 10.12.2010
comment
Это довольно интересная библиотека, хорошая находка, но я предполагаю, что для этого потребуется открыть браузер. Использование классов, встроенных в C#, обеспечило бы гораздо более прозрачный метод извлечения и обработки данных. - person Seidr; 10.12.2010
comment
Привет, да, я скачал эту библиотеку. Хороший. Спасибо, что поделились этим со мной. Но у меня есть небольшая проблема, сайт, на котором я хочу получить данные, имеет капчу на экране входа в систему. Можем ли мы справиться с этим в этой библиотеке. Можно показать капчу и позволить пользователю ввести ее в пользовательском интерфейсе. Если у вас есть образец кода, это будет лучше. - person Buddhi Dananjaya; 13.12.2010

Этого можно добиться с помощью класса WebRequest для извлечения страниц и HTML Agility Pack для извлечения элементов из HTML-источник.

person Tim Robinson    schedule 10.12.2010
comment
HTML Agility Pack, я должен это отметить. +1 за ответ - person Seidr; 10.12.2010

да, я скачал эту библиотеку. Хороший.

Спасибо за то, что поделился со мной. Но у меня проблема с этой библиотекой. Сайт, на котором я хочу получить данные, имеет «капчу» на странице входа.

Я могу ввести это значение, если это может отображать изображение и ждать моего ввода.

Можем ли мы получить это из этой библиотеки, если вы хотите получить образец.

person Buddhi Dananjaya    schedule 13.12.2010

Вы должны быть в состоянии добиться этого, используя два класса в C#, HttpWebRequest (для запроса веб-страниц) и, возможно, XmlTextReader (для анализа ответа HTML/XML).

Если вы не хотите использовать XmlTextReader, я бы посоветовал изучить регулярные выражения, так как они фантастически полезны для извлечения информации из больших текстов, в которых существуют шаблоны.

Как отправлять данные с помощью класса WebRequest

person Seidr    schedule 10.12.2010
comment
Но как мне добиться .. Функция нажатия .. Для входа в систему мне нужно нажать кнопку. И чтобы получить цену на продукт, мне нужно щелкнуть ссылку и подождать, чтобы получить данные.. Я думаю, что при таком подходе мы не можем делать такие вещи, не так ли ...?? - person Buddhi Dananjaya; 10.12.2010
comment
Хотя вы, возможно, не сможете анализировать HTML с помощью RegEx, вы можете извлечь с его помощью фрагменты информации из определенных разделов известной структуры HTML. Что касается «нажатий», это достигается путем создания собственных запросов POST/GET. Когда вы нажимаете кнопку отправки, один из этих двух типов запросов отправляется в цель формы. Вам просто нужно выяснить, какие данные отправляются, и воссоздать этот запрос с помощью класса WebRequest. - person Seidr; 10.12.2010