С# httpwebrequest и javascript
Я использую С# HttpWebRequest для получения некоторых данных веб-страницы. Проблема в том, что некоторые данные обновляются с помощью javascript/ajax после загрузки страницы, и я не получаю ее в строке ответа. Есть ли способ, чтобы запрос веб-запроса оставался до тех пор, пока все скрипты на странице не закончили выполнение?
Спасибо
Амит
Ответы
Ответ 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)
});
});