이 기사에서는 System.Windows.Forms의 WebBrowser 클래스 또는 Microsoft HTML 개체 라이브러리 어셈블리의 HTMLDocument 인터페이스를 사용하여 HTML 코드를 동적으로 생성하는 방법을 살펴봅니다.
사용자가 처음에 System.Windows.Forms.WebBrowser 클래스를 사용하려고 시도했지만 렌더링된 HTML 코드를 가져오는 데 제한이 발생했습니다. mshtml.HTMLDocument 인터페이스를 통해 코드에 액세스하는 동안 동일한 문제가 발생했습니다.
사용자는 이러한 방법을 배제하고 대안을 찾았으며 WebBrowser의 속성을 사용하여 필요한 데이터를 얻었지만 이 접근 방식의 단점을 인정했습니다.
제안된 솔루션은 WebBrowser 클래스와 async/await 프로그래밍을 결합하여 WebBrowser.IsBusy 속성을 확인하는 동안 페이지의 현재 HTML 스냅샷의 변경 사항을 효율적으로 폴링합니다. 주요 고려 사항은 다음과 같습니다.
다음 코드는 캡슐화된 솔루션의 LoadDynamicPage 메서드를 보여줍니다.
<code class="language-csharp">async Task<string> LoadDynamicPage(string url, CancellationToken token) { // 导航和DocumentCompleted事件处理 var tcs = new TaskCompletionSource<bool>(); WebBrowserDocumentCompletedEventHandler handler = (s, arg) => tcs.TrySetResult(true); using (token.Register(() => tcs.TrySetCanceled(), useSynchronizationContext: true)) { this.webBrowser.DocumentCompleted += handler; try { this.webBrowser.Navigate(url); await tcs.Task; // 等待DocumentCompleted } finally { this.webBrowser.DocumentCompleted -= handler; } } // 获取根元素 var documentElement = this.webBrowser.Document.GetElementsByTagName("html")[0]; // 异步轮询当前HTML更改 var html = documentElement.OuterHtml; while (true) { // 异步等待 await Task.Delay(500, token); // 如果WebBrowser繁忙,则继续轮询 if (this.webBrowser.IsBusy) continue; var htmlNow = documentElement.OuterHtml; if (html == htmlNow) break; // 未检测到更改,结束轮询循环 html = htmlNow; } // 认为页面已完全渲染 token.ThrowIfCancellationRequested(); return html; }</code>
Internet Explorer 10 이상에서 HTML5 렌더링을 활성화하려면 아래 표시된 브라우저 기능 컨트롤을 사용하세요.
<code class="language-csharp">private static void SetFeatureBrowserEmulation() { if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) return; var appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, 10000, RegistryValueKind.DWord); }</code>
위 내용은 .NET의 WebBrowser 및 Async/Await를 사용하여 동적 HTML을 효율적으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!