我试图使用WebBrowser
课程,但当然它不起作用。
我的代码:
WebBrowser browser = new WebBrowser();
browser.Navigate("http://www.google.com");
while(browser.DocumentText == "")
{
continue;
}
string html = browser.DocumentText;
browser.DocumentText
始终为""
。为什么呢?
答案 0 :(得分:5)
您应该使用DocumentCompleted
事件,如果您没有WebForms应用程序,则可能还需要ApplicationContext。
static class Program
{
[STAThread]
static void Main()
{
Context ctx = new Context();
Application.Run(ctx);
// ctx.Html; -- your html
}
}
class Context : ApplicationContext
{
public string Html { get; set; }
public Context()
{
WebBrowser browser = new WebBrowser();
browser.AllowNavigation = true;
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);
browser.Navigate("http://www.google.com");
}
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Html = ((WebBrowser)sender).DocumentText;
this.ExitThread();
}
}
答案 1 :(得分:3)
WebBrowser在当前线程完成它的工作之前不会做它的工作,如果你把它改成这样的话:
WebBrowser browser = new WebBrowser();
browser.Navigate("http://www.google.com");
browser.Navigated += (s, e) =>
{
var html = browser.DocumentText;
};
将设置变量。
但是,正如其他人所说,完成的文件是一个更好的附加事件,因为那时整个文件将完成(适当的名称!)
WebBrowser browser = new WebBrowser();
browser.Navigate("http://www.google.com");
browser.DocumentCompleted += (s, e) =>
{
var html = browser.DocumentText;
html.ToString();
};
答案 2 :(得分:2)
附加到DocumentCompleted
事件,代码如下
browser.DocumentCompleted += (s, e) =>
{
string html = browser.DocumentText;
};
答案 3 :(得分:1)
如果您需要DocumentText,则应处理DocumentCompleted事件
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);
见下面的事件
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser wb = (WebBrowser)sender;
string text = wb.DocumentText;
}
答案 4 :(得分:-1)
尝试这样的事情
string url = string.Empty:
string html = "http://www.google.com/";
string url = html;
if (!url.StartsWith("http://") && !url.StartsWith("https://"))
{
url = "http://" + url;
}
browser.Navigate(new Uri(url));
在必要时在While循环中替换它