我想在我的代码中以编程方式创建WebBrowser控件,然后阅读页面内容 我认为我做的与设计师做的一样,但动态创建的控件不起作用(DocumentText返回空字符串)
我做错了什么?
编辑2: @Axarydax建议(工作)后的代码更改
主要街区代码:
WebBrowser browser = new WebBrowser { Name = "myBrowser"};
browser.DocumentCompleted += browser_DocumentCompleted;
browser.Navigate("www.google.com");
while (pageLoaded == false)
{
Thread.Sleep(500); // pageLoaded is local field
Application.DoEvents(); // didn't wotk without this...
}
Console.WriteLine(browser.DocumentText);
事件处理程序代码:
void browser_DocumentCompleted (object sender, WebBrowserDocumentCompletedEventArgs e )
{
pageLoaded = true;
}
答案 0 :(得分:2)
导航方法是异步的,因此您应该等待导航完成事件被触发。 但是,如果您想要页面的HTML,请使用System.Net.WebClient。
答案 1 :(得分:1)
Navigate
方法异步工作,因此页面在后台加载,当您访问DocumentText
属性时没有文本。
尝试为DocumentCompleted
事件添加处理程序,并在那里移动Console.WriteLine(browser.DocumentText)
来电。
答案 2 :(得分:1)
您需要为要触发的事件提取消息。使用缺少消息调度的while循环阻塞消息泵(例如Application.DoEvents)将不起作用。