[英]Webbrowser control is not showing Html but shows webpage
我正在使用webbrowser控件自動化任務,該站點使用框架顯示頁面。 我的問題是,我可以看到在webbrowser控件上正確加載了網頁,但是當它進入代碼並且看到html時,我什么也看不到。
我在這里也看到了其他示例,但是所有這些示例都不會返回所有瀏覽器html。
我通過使用這個得到什么:
HtmlWindow frame = webBrowser1.Document.Window.Frames[1];
string str = frame.Document.Body.OuterHtml;
只是 :
具有諸如SRC標簽等屬性的主框架標簽,有什么方法可以處理此問題?因為我可以看到網頁已完全加載,為什么我在Internet Explorer上看到HTML時卻看不到html?AS頁面源一旦加載,為什么不在這里?
附加信息
頁面上有兩個框架:
我如上所述
HtmlWindow frame = webBrowser1.Document.Window.Frames [0];
string str = frame.Document.Body.OuterHtml;
我為第一幀獲得了正確的HTMl,但是對於第二幀,我只看到了:
<FRAMESET frameSpacing=1 border=1 borderColor=#ffffff frameBorder=0 rows=29,*><FRAME title="Edit Search" marginHeight=0 src="http://web2.westlaw.com/result/dctopnavigation.aspx?rs=WLW12.01&ss=CXT&cnt=DOC&fcl=True&cfid=1&method=TNC&service=Search&fn=_top&sskey=CLID_SSSA49266105122&db=AK-CS&fmqv=s&srch=TRUE&origin=Search&vr=2.0&cxt=RL&rlt=CLID_QRYRLT803076105122&query=%22LAND+USE%22&mt=Westlaw&rlti=1&n=1&rp=%2fsearch%2fdefault.wl&rltdb=CLID_DB72585895122&eq=search&scxt=WL&sv=Split" frameBorder=0 name=TopNav marginWidth=0 scrolling=no><FRAME title="Main Document" marginHeight=0 src="http://web2.westlaw.com/result/dccontent.aspx?rs=WLW12.01&ss=CXT&cnt=DOC&fcl=True&cfid=1&method=TNC&service=Search&fn=_top&sskey=CLID_SSSA49266105122&db=AK-CS&fmqv=s&srch=TRUE&origin=Search&vr=2.0&cxt=RL&rlt=CLID_QRYRLT803076105122&query=%22LAND+USE%22&mt=Westlaw&rlti=1&n=1&rp=%2fsearch%2fdefault.wl&rltdb=CLID_DB72585895122&eq=search&scxt=WL&sv=Split" frameBorder=0 borderColor=#ffffff name=content marginWidth=0><NOFRAMES></NOFRAMES></FRAMESET>
更新
框架的兩個網址如下:
我看到其HTML的Frame1
http://web2.westlaw.com/nav/NavBar.aspx?RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST=
Frame2的html我看不到:
http://web2.westlaw.com/result/result.aspx?RP=/Search/default.wl&action=Search&CFID=1&DB=AK%2DCS&EQ=search&fmqv=s&Method=TNC&origin=Search&Query=%22LAND+USE%22&RLT=CLID%5FQRYRLT302424536122&RLTDB=CLID%5FDB6558157526122&Service=Search&SRCH=TRUE&SSKey=CLID%5FSSSA648523536122&RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST=
下圖顯示的是我無法獲取html的第二幀的屬性:
謝謝
我為上述問題的解決方案付費,並且可以100%使用。
我所做的是使用下面的此函數,它使我將計數返回到要查找的標簽,而我找不到:S。使用此函數可以調用下面列出的函數:
FillFrame(webBrowser1.Document.Window.Frames);
private void FillFrame(HtmlWindowCollection hwc)
{
if (hwc == null) return;
foreach (HtmlWindow hw in hwc)
{
HtmlElement getSpanid = hw.Document.GetElementById("mDisplayCiteList_ctl00_mResultCountLabel");
if (getSpanid != null)
{
doccount = getSpanid.InnerText.Replace("Documents", "").Replace("Document", "").Trim();
break;
}
if (hw.Frames.Count > 0) FillFrame(hw.Frames);
}
}
希望它能幫助人們。
謝謝
對於采用html,您必須這樣做:
WebClient client = new WebClient();
string html = client.DownloadString(@"http://stackoverflow.com");
當然,這是一個示例,您可以更改地址。 順便說一句,您需要使用System.Net。
這很好用...使BODY元素具有所有內部元素:
表單代碼中的某處:
wb.Url = new Uri("http://stackoverflow.com");
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbDocumentCompleted);
這是wbDocumentCompleted:
void wb1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var yourBodyHtml = wb.Document.Body.OuterHtml;
}
wb是System.Windows.Forms.WebBrowser
更新:
在相同的文檔,我認為你的第二個框架是不是你檢查它的內容時加載的......你可以嘗試從解決這個鏈接。 您必須等待框架加載才能看到其內容。
最可能的原因是幀索引0與主/父頁面具有相同的域名,而幀索引1具有不同的域名。 我對么?
這會造成跨框架的安全問題,而WB控件只會讓您高高在干,而不會告訴您到底出了什么問題,而只是讓您的對象,屬性和數據為空(將在窗口中顯示“無變量”嘗試擴展對象時,請觀看窗口)。
在這種情況下,您唯一可以訪問的就是URL和iFrame屬性,但iFrame內部沒有任何內容。
當然,有一些方法可以解決跨框架安全問題-但它們並未內置在WebBrowser控件中,它們是外部解決方案,具體取決於您使用的是哪個WB控件(如.NET版本或.NET之前的版本)版)。
讓我知道我是否正確識別了您的問題,如果可以,請讓我告訴您有關為WB控件的設置和實例量身定制的解決方案的信息。
更新 :我注意到您正在執行.getElementByTagName(“ HTML”)(0).outerHTML以獲取HTML,您所需要做的就是在文檔對象或.body對象上調用此方法,並且應該這樣做它。 MyDoc.Body.innerHTML應該獲得所需的內容。 另外,請注意,如果相關,這些文檔中還有其他iFrame。 您能否給我們提供包含這兩個URL的主文檔URL,以便我們/我可以在這里復制您的操作? 另外,不確定為什么要使用DomElement,但應該將其轉換為要轉換為的本機對象,即IHTMLDocument2或在監視窗口中看到的對象,我認為這是IHTMLFrameElement(如果我沒記錯的話,但是一旦您看到它,您就會知道我的意思。 如果您嘗試使用XML對象,這可能就是為什么您無法獲取HTML內容,更改對象聲明並進行強制轉換(如果有的話),然后繼續執行並讓我們知道的原因:)。 現在我也很好奇:)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.