我正在尝试读取和写入数据以打开c#
中的浏览器窗口当我调用webBrowser1.Document.Body all&#34; data&#34;应该返回<body>
标记吗?
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://cs-bg.info/");
webBrowser1.Navigated += WebBrowser1OnNavigated;
}
private void WebBrowser1OnNavigated(object sender, WebBrowserNavigatedEventArgs webBrowserNavigatedEventArgs)
{
if (webBrowser1.Document == null)
{
webBrowser1.Refresh();
return;
}
switch (Action)
{
case Action.Login:
Login();
break;
}
}
private void Login()
{
var magic = webBrowser1.Document.Body; // magic is always null
}
答案 0 :(得分:0)
这是因为文件尚未完成加载。处理DocumentCompleted事件如下: -
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(IsLoadComplete);
private void IsLoadComplete(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Login();
}
答案 1 :(得分:0)
您应该等待WebBrowser完全加载目标网址,但不能直接依赖DocumentCompleted
事件!对于任何图片和其他页面内容的网页,此事件可能会多次发生。
您可以使用IsBusy
属性
webBrowser1.Navigate("url");
while(webBrowser1.IsBusy)
Application.DoEvents(); //wait to document be ready
logOn(); //document is ready so do your task.
或者使用上面的ReadyState
属性。但是如果你想使用DocumentCompleted
事件,你应该检查完成的URL与导航的URL相同,而不是脚本或图片或其他任何东西:
webBrowser1.Navigate(myUri);
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (e.Url.AbsoluteUri != myUri)
return;
//else do anything
logOn();
}