Это связано с тем, что браузер не позволяет вам получать доступ к iframes из другого домена, это также происходит на сайтах https, где доменное имя такое же, к счастью, есть способ обойти это.
Вы можете получить содержимое IFrame с помощью JS после полной загрузки страницы.
Сначала загружает адрес страницы, которая имеет IFRAME внедренное:
webBrowser1.Navigate("https://www.example.com/pagecontaingiframe.html");
webBrowser1.DocumentCompleted += WebBrowserDocumentCompleted;
Затем в документе завершения события, убедитесь, что IFrame URL загружен, а не оригинальный URL мы переходите к, когда мы имеем загрузите, используйте функцию eval
в javascript, чтобы запустить собственный код, чтобы вытащить содержимое iframe.
void WebBrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// Optionally check that the url is the original document
// search for an iframe and its url here first.
// Then store the name and url for the next step
// And the magic begins
if (e.Url.AbsolutePath != new Uri("https://www.example.com/iframeyouneedurl.html").AbsolutePath)
return;
webBrowser1.DocumentCompleted -= WebBrowserDocumentCompleted;
string jCode = "var iframe = document.getElementsByName('iframe_element')[0]; var innerDoc = iframe.contentDocument || iframe.contentWindow.document; innerDoc.documentElement.innerHTML";
string html = webBrowser1.Document.InvokeScript("eval", new object[] { jCode });
}
Перейдите на главную страницу и страницу внутри Iframe, принадлежащих к одному домену? –
@YuriyGalanter: Я не уверен, почему это имеет значение, если webBrowser уже загрузил страницу? – ojek
Я думаю, что вы, возможно, испытываете политику «Одинаковый исход», которая не позволяет межстраничной странице общаться в обычном браузере. Что касается webBrowser, вы пытаетесь получить доступ к странице из одного домена из другого –