Любой обходной путь, чтобы получить текст в iFrame на другом домене в WebBrowser? - PullRequest
5 голосов
/ 21 сентября 2011

Возможно, вы сначала подумаете, что это невозможно из-за ограничений XSS.Но я пытаюсь получить доступ к этому контенту из приложения, в котором размещен WebBrowser, а не из кода JavaScript на сайте.

Я понимаю, что это невозможно и не должно быть возможно без хакерских способов получить доступ к этому контенту из javascript, потому что это было бы большой проблемой безопасности.Но нет никакого смысла иметь это ограничение от приложения, в котором находится WebBrowser.Если бы я хотел получить информацию о пользователе своего приложения на Facebook, я мог бы просто набрать Navigate("facebook.com") и делать все, что захочу.Это приложение, в котором размещается WebBrowser, а не веб-страница.

Кроме того, если вы переходите с Google Chrome на любую веб-страницу, содержащую iFrame, источник которого находится в другом домене, и щелкните правой кнопкой мыши его содержимое и выберите «ПроверитьЭлемент, он покажет вам содержание.Еще проще, если вы перейдете на любую веб-страницу, содержащую iFrame в другом домене, вы увидите ее содержимое.Если вы видите это на WebBrowser, то вы должны иметь возможность получить к нему программный доступ, потому что он должен быть где-то в памяти.

Есть ли какой-то способ, не из объектов DOM, потому что они кажутсябыть основанным на том же движке, что и javascript, и, следовательно, ограниченным ограничениями XSS, но из некоторых объектов более низкого уровня, таких как MSHTML или SHDocVw, для доступа к этому тексту?

Ответы [ 2 ]

6 голосов
/ 28 сентября 2011

Может ли это быть полезным для вас?

foreach (HtmlElement elm in webBrowser1.Document.GetElementsByTagName("iframe"))
{
     string src = elm.GetAttribute("src");
     if (src != null && src != "")
     {
          string content = new System.Net.WebClient().DownloadString(src); //or using HttpWebRequest
          MessageBox.Show(content);
     }
}
0 голосов
/ 21 сентября 2011

Вам нужен способ запроса контента из кода?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webRequest.URL);
request.UserAgent = webRequest.UserAgent;
request.ContentType = webRequest.ContentType;
request.Method = webRequest.Method;

if (webRequest.BytesToWrite != null && webRequest.BytesToWrite.Length > 0) {
    Stream oStream = request.GetRequestStream();
    oStream.Write(webRequest.BytesToWrite, 0, webRequest.BytesToWrite.Length);
    oStream.Close();
}

// Send the request and get a response
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

// Read the response
StreamReader sr = new StreamReader(resp.GetResponseStream());

// return the response to the screen
string returnedValue = sr.ReadToEnd();

sr.Close();
resp.Close();

return returnedValue;
...