単純な(そして奇妙な)問題があります。プロパティを HTML 文字列に手動で設定するとWebBrowser.DocumentText
、ランダムな文字の後で途切れてしまいます。私が使用する HTML は、他のページのプレーンな HTML であり、HtmlAgilityPack を介してダウンロードされます (実際のアプリケーションでは、何らかの処理を行いますが、何も処理しなくてもバグは存在します)。Internet Explorer で同じページを読み込むと、ページ全体が正しくレンダリングされます。
最小限の例を次に示します。
const string url = "http://www.zip-codes.com/county/IL-COOK.asp";
var doc = new HtmlWeb().Load(url);
HtmlNode basehref = new HtmlNode(HtmlNodeType.Element, doc, 0) { Name = "base" };
basehref.Attributes.Add("href", url.Substring(0, url.LastIndexOf("/") + 1));
doc.DocumentNode.SelectSingleNode("//head").ChildNodes.Insert(0, basehref);
string html;
using (var writer = new StringWriter()) {
doc.Save(writer);
html = writer.ToString();
}
var thread = new Thread(() => {
var browser = new WebBrowser {
Location = new Point(0, 0),
Size = new Size(1920, 1080),
ScriptErrorsSuppressed = true,
AllowNavigation = true,
DocumentText = html
};
browser.DocumentCompleted += (sender, e) => {
Console.WriteLine(html.Length);
Console.WriteLine(browser.DocumentText.Length);
Application.ExitThread();
};
Application.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
以下を出力します。
35259
20477