Подтвердить что ты не робот

С# httpwebrequest и javascript

Я использую С# HttpWebRequest для получения некоторых данных веб-страницы. Проблема в том, что некоторые данные обновляются с помощью javascript/ajax после загрузки страницы, и я не получаю ее в строке ответа. Есть ли способ, чтобы запрос веб-запроса оставался до тех пор, пока все скрипты на странице не закончили выполнение?

Спасибо

Амит

4b9b3361

Ответ 1

Если я правильно интерпретирую ваш вопрос, нет простого решения вашей проблемы.

Вы очищаете HTML с сервера, и поскольку ваш код С# не является настоящим веб-браузером, он не выполняет клиентские скрипты.

Таким образом, вы не можете получить доступ к информации, которую HTML-код не содержит.

Изменить: Я не знаю, насколько сложны эти вызовы AJAX с исходного веб-сайта, но вы можете использовать Firebug или Fiddler для IE, чтобы увидеть, как делаются запросы для вызова этих AJAX также вызывает ваше приложение С#. Поэтому вы можете добавить нужные вам фрагменты информации. Но это только теоретическое решение.

Ответ 2

Просто идея, но есть способ иметь .net загрузить веб-страницу, как если бы она была в браузере: using System.Windows.Forms

вы можете загрузить веб-страницу в элемент управления WebBrowser

WebBrowser wb = new WebBrowser();
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
wb.Document.DomDocument.ToString()

Это, вероятно, даст вам pre ajax DOM, но, возможно, есть способ разрешить ему сначала запустить ajax.

Ответ 3

Когда вы открываете веб-страницу в веб-браузере, браузер выполняет javascript и загружает дополнительные ресурсы, используемые этой страницей (изображения, скрипты и т.д.). HttpWebRequest сам по себе не будет делать этого, он будет загружать только html для запрошенной вами страницы. Он никогда не выполнит какой-либо из кода javascript/ajax.

Ответ 4

Используйте HttpWebRequest для загрузки страницы, программного поиска исходного кода для соответствующей информации ajax, а затем используйте новый HttpWebRequest, чтобы вытащить эти данные.

Ответ 5

HttpWebRequest не эмулирует веб-браузер, он просто загружает ресурс, на который вы указываете. Это означает, что он не будет выполнять или даже загружать файлы JavaScript.

Вам нужно будет использовать что-то вроде FireBug, чтобы получить URL-адрес для данных, втягиваемых через JavaScript, и указать на это HttpWebRequest.

Ответ 6

Используйте HttpWebRequest для загрузки страницы. Найдите исходный код для соответствующей информации AJAX, а затем используйте новый HttpWebRequest, чтобы удалить эти данные.

Ответ 7

Вы можете использовать PhantomJs. У меня был этот вопрос, но я не нашел решения для своей проблемы. На мой взгляд, лучшим решением является This.

Мое решение выглядит так:

var page = require('webpage').create();

page.open("https://sample.com", function(){
    page.evaluate(function(){
        var i = 0,
        oJson = jsonData,
        sKey;
        localStorage.clear();

        for (; sKey = Object.keys(oJson)[i]; i++) {
            localStorage.setItem(sKey,oJson[sKey])
        }
    });

    page.open("https://sample.com", function(){
        setTimeout(function(){
         page.render("screenshoot.png") 
            // Where you want to save it    
           console.log(page.content); //page source
            // You can access its content using jQuery
            var fbcomments = page.evaluate(function(){
                return $("body").contents().find(".content") 
            }) 
            phantom.exit();
        },10000)
    });     
});