Доброе время суток.
Получается интересная вещь, мне надо сохранить данные из aspx странички, которая лежит на сервере (без участия пользователя), страница состоит из фреймов, вот код:
<frameset frameBorder="0" rows="175,*">
<frame NORESIZE name="CrystalViewerToolbar" src="toolbar.aspx?id=308">
<frame name="CrystalViewerPreview" src="">
</frameset>
Интересующая меня информация находиться в CrystalViewerPreview. Пытался загрузить файл по HTTP:
strURL=”
http://server/page.aspx”
Dim PageRequest As HttpWebRequest = CType(WebRequest.Create(strURL), HttpWebRequest)
PageRequest.ContentType = "text/html; CHARSET=UTF-8"
PageRequest.Credentials = New NetworkCredential("User", "password", "firma")
Dim PageResponse As WebResponse = PageRequest.GetResponse
Dim r As New IO.StreamReader(PageResponse.GetResponseStream)
Dim page As String = r.ReadToEnd
r.Close()
Программка возвращает, то что выше писал (фреймы). Можно как-нибудь получить html-код того, что IE отображает (уже интерпретированный браузером код)?
Пытался использовать SHDocVw.InternetExplorer :
Dim ie As New SHDocVw.InternetExplorer
ie.Navigate(strURL)
Dim doc As Object
doc = ie.Document
TextBox1.Text = doc.documentElement.innerHTML
(Использовать фреймы у ie.Document – не получилось – frames <error: an exception of type: {System.InvalidCastException} occurred> mshtml.FramesCollection)
Что-то типа того, но эффект такой же. Пытался сохранять
ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_SAVEAS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, "", "")
Но сохраняет не то что нужно.
Повторяю еще раз вопрос:
Можно как-нибудь получить html-код того, что IE отображает (уже интерпретированный браузером код)?
R>Повторяю еще раз вопрос:
R>Можно как-нибудь получить html-код того, что IE отображает (уже интерпретированный браузером код)?
можно рендеринг перехватить
protected override void Render(HtmlTextWriter writer)
{
StringBuilder sb = new StringBuilder();
HtmlTextWriter w = new HtmlTextWriter(new System.IO.StringWriter (sb));
base.RenderChildren (w);
w.Flush();
string sFind = "</caption><tr class=\"GridHeader\">\r\n\t\t<td>Помещение</td>";
//sb.Replace(sFind ,"<tr class = GridHeader ><td rowspan=2>Дата</td><td rowspan=2>Объект</td><td rowspan=2>Торговая марка</td><td colspan=4>Наши пожелания</td><td colspan=4>Пожелания клиента</td><td rowspan=2></td></tr>"+sFind);
writer.Write(sb.ToString());
}
либо если тебе нужно изменить рендеринг определенного контрола, то используй SetRenderMethodDelegate
Здравствуйте, egaron, Вы писали:
R>>Повторяю еще раз вопрос:
R>>Можно как-нибудь получить html-код того, что IE отображает (уже интерпретированный браузером код)?
E>можно рендеринг перехватить
E>E> protected override void Render(HtmlTextWriter writer)
E> {
E> StringBuilder sb = new StringBuilder();
E> HtmlTextWriter w = new HtmlTextWriter(new System.IO.StringWriter (sb));
E> base.RenderChildren (w);
E> w.Flush();
E> string sFind = "</caption><tr class=\"GridHeader\">\r\n\t\t<td>Помещение</td>";
E> //sb.Replace(sFind ,"<tr class = GridHeader ><td rowspan=2>Дата</td><td rowspan=2>Объект</td><td rowspan=2>Торговая марка</td><td colspan=4>Наши пожелания</td><td colspan=4>Пожелания клиента</td><td rowspan=2></td></tr>"+sFind);
E> writer.Write(sb.ToString());
E> }
E>
E>либо если тебе нужно изменить рендеринг определенного контрола, то используй SetRenderMethodDelegate
Но у меня нет доступа к серверному коду странице, мне надо на клиенте запустить -> клиент посылает запрос -> полученный ответ сохраняется на клиенте, Проблема — если просто запустить в браузере, возращаетсся нормально, через VB возращается фреймы.
Здравствуйте, Ramm, Вы писали:
R>Но у меня нет доступа к серверному коду странице, мне надо на клиенте запустить -> клиент посылает запрос -> полученный ответ сохраняется на клиенте, Проблема — если просто запустить в браузере, возращаетсся нормально, через VB возращается фреймы.
Эх, дружище, не писал ты ничего на HTML

Браузеру приходит фреймсет, он его разбирает и запрашивает (отдельно!) содержимое конкретных фреймов. Так что красота в IE несколько обманчива