Как читать содержимое элемента с веб-страницы с помощью компонента WPF WebBrowser - PullRequest
1 голос
/ 16 декабря 2011

Как получить значение элемента с веб-страницы в C # с помощью компонента WPF WebBrowser?

Например, я хочу получить это значение 1.7655 с этой страницы http://www.forexpros.com/currencies/usd-gel.

Спасибо

Ответы [ 4 ]

5 голосов
/ 25 февраля 2013

Для получения содержимого WPF WebBrowser я где-то нашел это решение, и, похоже, оно работает, но только , если целевой платформой является как минимум .Net 4.0, и вы включаете Microsoft.CSharp.dll не может быть выбран, если ваша целевая структура <4.0). Я добавил это в <code>LoadCompleted:

private void myBrowser_LoadCompleted(object sender, NavigationEventArgs e)
{
    dynamic doc = myBrowser.Document;
    dynamic htmlText = doc.documentElement.InnerHtml;
    string htmlstring = htmlText;
}

Добавить,

myBrowser.LoadCompleted += new LoadCompletedEventHandler(myBrowser_LoadCompleted);

после InitializeComponent(), чтобы убедиться, что метод вызывается.

1 голос
/ 16 декабря 2011

Не будет общего способа получить значение из случайного элемента - вам нужно знать структуру HTML конкретной страницы и как найти искомый элемент.Но если вы знаете оба из них, вы можете прочитать страницу в какой-то документ HTML (XmlDocument сработает, если будет гарантия, что HTML будет правильно структурирован), а затем получить значение оттуда.

При желании вы можете запустить страницу с помощью какой-либо очистки HTML (может быть, NTidy ?), А затем загрузить ее в XmlDocument.Одним из недостатков такого подхода является то, что структура страницы может измениться во время очистки.

1 голос
/ 16 декабря 2011

После вызова метода Navigate компонента WebBrowser в WPF для открытия веб-страницы наступает событие DocumentCompleted, и вы можете безопасно просматривать содержимоестраницы (обратите внимание, что иногда это событие происходит несколько раз).Свойство Document WebBrowser содержит HTML в уже обработанном формате, называемом деревом DOM.К сожалению, вы не можете легко использовать это свойство, так как это всего лишь object. Эта функция не была реализована в WPF (декабрь 2011 г.).

Я бы вместо этого использовал Winforms версию WebBrowser.Вы можете использовать его в приложении WPF, если встраиваете его в WindowsFormsHost.Этот класс завершен: его свойство Document является объектом HtmlDocument, со свойством Body, которое является HtmlElement, которое содержит содержимое страницы.Вы можете рекурсивно пройтись по дереву DOM, чтобы найти нужный элемент (и прочитать его InnerText), или просто обработать текст всей страницы, используя Regex или библиотеку HTML-анализатора .

0 голосов
/ 16 декабря 2011

У вас есть несколько вариантов для чтения значения с веб-страницы.

  1. Получить страницу в элементе управления веб-браузера.Затем попытайтесь выяснить, имеет ли элемент, содержащий желаемое значение, определенное имя, и получите этот элемент из свойства документа элемента управления webbrowser.
  2. Используйте HtmlAgilityPack для анализа html этой веб-страницы, чтобы найти элемент и получить из него значение.
  3. Попробуйте выяснить, имеет ли веб-страница определенную структуру, и используйте регулярное выражение для поискажелаемое значение (может быть хитрым!)

Итак, вы видите, у вас есть много способов найти желаемое значение (и я думаю, что это не все варианты). Итак, потратьте немного усилий, чтобы получить это значение. И, если у вас возник вопрос о какой-то проблеме, не стесняйтесь и спросите снова о переполнении стека.Но, пожалуйста, потратьте некоторое время на формулировку своего вопроса.Помните: хороший вопрос очень часто дает хорошие ответы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...