Wie in der Abfrage angegeben, enthält die Webseite beim Versuch, Videoclip-Links von einer bestimmten Website mithilfe des WebBrowser-Steuerelements zu sammeln, Iframes, die ihre eigenen Dokumente und Elemente hosten. Das Videoelement kann nicht gefunden werden, wenn man sich ausschließlich auf das HTML-Element des Hauptdokuments verlässt. Daher ist es notwendig, sich mit den Elementen des Iframes auseinanderzusetzen, um die erforderlichen Informationen zu finden.
Um HTML-Elemente effizient aus einem Frame/Iframe abzurufen, können Sie die folgenden Schritte ausführen:
1. Identifikationsrahmen:
2. Analysieren Sie das Rahmendokument:
3. HTML-Elementattribute extrahieren:
Hier ist eine Beispielimplementierung, die zeigt, wie HTML-Elemente aus einem Frame analysiert werden:
<code class="language-c#">public class FrameHtmlElementParser { private List<MovieLink> movieLinks = new List<MovieLink>(); //更正变量名 public void ParseMovies(WebBrowser browser) { browser.DocumentCompleted += Browser_DocumentCompleted; } private void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { var browser = sender as WebBrowser; if (browser.ReadyState != WebBrowserReadyState.Complete) { return; } var documentFrames = browser.Document.Window.Frames; foreach (HtmlWindow frame in documentFrames) { try { var videoElement = frame.Document.Body.GetElementsByTagName("video").OfType<HtmlElement>().FirstOrDefault(); //更正标签名 if (videoElement != null) { string videoLink = videoElement.GetAttribute("src"); int hash = videoLink.GetHashCode(); if (movieLinks.Any(m => m.Hash == hash)) //更正变量名 { // 完成此 URL 的解析。删除处理程序或采取其他适当的操作。 return; } string sourceImage = videoElement.GetAttribute("poster"); movieLinks.Add(new MovieLink //更正变量名 { Hash = hash, VideoLink = videoLink, ImageLink = sourceImage }); } } catch (UnauthorizedAccessException) { } // 无法避免:忽略 catch (InvalidOperationException) { } // 无法避免:忽略 } } } public class MovieLink //添加MovieLink类定义 { public int Hash { get; set; } public string VideoLink { get; set; } public string ImageLink { get; set; } }</code>
Um zu verhindern, dass doppelte HTML-Elementattribute gespeichert werden, verwendet der Beispielcode eine benutzerdefinierte MovieLink-Klasse, die den HashCode jedes referenzierten Links enthält. Durch den Vergleich des HashCodes wird nach Duplikaten gesucht, bevor das neue Element zur movieLinks-Liste hinzugefügt wird.
Die folgenden Änderungen wurden am Code vorgenommen:
movielink
zu MovieLink
und VIDEO
zu video
korrigiert. MovieLink
Klassendefinition hinzugefügt: Dadurch wird der Code vollständiger und leichter verständlich. Dadurch lässt sich der Code einfacher kompilieren und ausführen und entspricht besser den C#-Codierungskonventionen.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich HtmlElements aus Frames und IFrames im WebBrowser-Steuerelement?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!