скачать HTML-код, представленный на сайтах asp.net - PullRequest
1 голос
/ 07 августа 2011

Мне нужно скачать и разобрать веб-сайт, созданный ASP.NET. Если я использую приведенный ниже код, я получаю только половину страницы без отображаемого «контента», который мне нужен. Я хотел бы получить полный контент, который можно увидеть с помощью Firebug или IE Developer Tool.

Как я могу это сделать. Я не нашел решения.

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
string code = streamReader.ReadToEnd();

Спасибо!

UPDATE

Я попробовал решение webcontrol. Но это не сработало. Я в проекте WPF и использую следующий код, и даже не получаю содержимое веб-сайта. Я не вижу своей ошибки сейчас :(.

System.Windows.Forms.WebBrowser webBrowser = new System.Windows.Forms.WebBrowser();
Uri uri = new Uri(myAdress);

webBrowser.AllowNavigation = true;
webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
webBrowser.Navigate(uri);

private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            System.Windows.Forms.WebBrowser wb = sender as System.Windows.Forms.WebBrowser;
            string tmp = wb.DocumentText;

        }

ОБНОВЛЕНИЕ 2

Это код, который я придумал тем временем. Однако я не получаю никакого вывода. Моя elementCollection не возвращает никаких значений. Если бы я мог получить исходный код html в виде строки, я был бы счастлив и проанализировал его с помощью HtmlAgilityPack. (Я не хочу включать браузер в свой код XMAL)

Извините за нервы!

Спасибо!

WebBrowser wb = new WebBrowser();
wb.Source = new Uri(MyURL);        
HTMLDocument doc = (HTMLDocument)wb.Document;
IHTMLElementCollection elementCollection = doc.getElementsByName("body");

    foreach (IHTMLElementCollection element in elementCollection)
    {
        tb.Text = element.toString();
    }

Ответы [ 6 ]

3 голосов
/ 07 августа 2011

Если страница, на которую вы ссылаетесь, имеет IFrames или другие механизмы динамической загрузки, использование HTTPWebRequest будет недостаточно.лучшим решением было бы (если возможно) использовать элемент управления WebBrowser

2 голосов
/ 07 августа 2011

Ответ может заключаться в том, что содержимое веб-сайта отображается с помощью JavaScript - возможно, с помощью некоторых вызовов AJAX, которые извлекают дополнительные данные с сервера для создания содержимого.Firebug и IE Developer Tool покажут вам визуализированный HTML-код, но если вы выберете «просмотреть исходный код», вы должны увидеть тот же HTML-код, что и тот, который вы получаете с кодом.

Я бы использовал инструментнапример, Fiddler Web Debugger для отслеживания загрузки страницы при ее визуализации.Возможно, вы сможете получить необходимый контент, имитируя запросы AJAX, которые делает страница.

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

1 голос
/ 24 июля 2012

Вы можете попробовать это:

public override void Render(HtmlTextWriter writer):
{
    StringBuilder renderedOutput = new StringBuilder();
    Streamwriter  strWriter = new StringWriter(renderedOutput);
    HtmlTextWriter tWriter = new HtmlTextWriter(strWriter);
    base.Render(tWriter);

    string html = tWriter.InnerWriter.ToString();

    string filename = Server.MapPath(".") + "\\data.txt";
    outputStream = new FileStream(filename, FileMode.Create);
    StreamWriter sWriter = new StreamWriter(outputStream);
    sWriter.Write(renderedOutput.ToString());
    sWriter.Flush();

    //render for output
    writer.Write(renderedOutput.ToString());
}
1 голос
/ 07 августа 2011

Ваш код должен загружать всю страницу. Тем не менее, страница может через JavaScript добавлять контент после загрузки. Если вы на самом деле не запустите этот JavaScript в веб-браузере, вы не увидите весь DOM, который вы видите в Firebug.

1 голос
/ 07 августа 2011

Возможно, это не ответ, но вы можете использовать класс WebClient , чтобы упростить код:

WebClient client = new WebClient();
string html = client.DownloadString(URL);
0 голосов
/ 27 октября 2014

Я рекомендую вам использовать следующий движок рендеринга вместо веб-браузера

https://github.com/cefsharp/CefSharp

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