我正在尝试使用WebBrowser
,因为我需要与通过JS创建的某些元素进行交互,而不是在原始响应中。
我已经阅读了其他问题,因为单线程程序正在等待读取密钥或类似事件,因此事件未被触发,因此无法触发事件。
但是,在我的情况下,它只是完成程序并且永远不会输入Client_DocumentCompleted
方法。
[STAThread]
static void Main(string[] args)
{
Helper();
}
static void Helper()
{
WebBrowser client = new WebBrowser();
client.DocumentCompleted += Client_DocumentCompleted;
client.AllowNavigation = true;
client.Navigate("https://www.google.com/");
}
private static void Client_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser client = (WebBrowser)sender;
while (client.ReadyState != WebBrowserReadyState.Complete)
{
Console.WriteLine(client.ReadyState);
}
string htmlCode = client.Document.ToString();
Console.Write(htmlCode);
Console.ReadKey();
}
我尝试在单独的线程中进行WebBrowser
交互但没有成功。
var t = new Thread(Helper);
t.SetApartmentState(ApartmentState.STA);
t.Start();
修改 已更新,以包含我的解决方案中已存在的[STAThread]属性
答案 0 :(得分:1)
您应该将STAThread
属性添加到Main
:
[STAThread]
static void Main(string[] args)
{
//...
}
使用COM组件时需要这样做