我正在尝试读取和写入数据以打开c#中的浏览器窗口
当我调用webBrowser1.Document.Body时,应该返回<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
}
这是因为文档尚未完成加载。按以下方式处理DocumentCompleted事件:-
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(IsLoadComplete);
private void IsLoadComplete(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Login();
}
您应该等待WebBrowser完全加载目标URL,但不能直接依赖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();
}