WatiN需要在STAThreaded线程之外声明浏览器

时间:2012-05-24 15:38:45

标签: c# watin

我目前正在尝试使用WatiN进行一些自动数据收集。我以前使用WebBrowser控件,我这样做的方式是我声明了一个stathread并从那里运行它,然后使用Browser.DocumentCompleted我开始void LoginPageLoaded我将设置用户并传递,并且登录。事情是,WatiN,我正在努力

var th = new Thread(() =>
    {
    Browser browser = new IE(url);
    browser.WaitForComplete();
    HolyThunder hl = new HolyThunder();
    l.LoginPageLoaded();
    });
    th.SetApartmentState(ApartmentState.STA);
    th.Start();

但显然,当我尝试在LoginPageLoaded上使用浏览器实例时,它会说它不知道它是什么,因为它是在第一个线程内声明的。当我通过browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LoginPageLoaded);运行LoginPageLoaded时,我没有这样做,我显然无法在该STAThread之外声明浏览器。您认为我能做些什么来解决这个问题?

编辑 - 我失败了......如果我在STAthread中做了我需要做的一切,一切都会好起来的。我现在的问题是,在watin中,无论如何打开一个“webbrowser”而没有实际拥有webbrowser的可视组件?

4 个答案:

答案 0 :(得分:0)

您可以尝试使用NHtmlUnit,它是一个无头浏览器。我不确定你是否可以用WatiN做到这一点。

答案 1 :(得分:0)

你可以无头地运行WebKit(例如参见http://phantomjs.org/),但我不知道你是否可以从WatiN开车。

答案 2 :(得分:0)

我猜你想隐藏网页浏览器窗口。 在这种情况下试试这个:

Settings.Instance.MakeNewIeInstanceVisible = false;

答案 3 :(得分:0)

打开" webbrowser"如果没有实际拥有webbrowser的可视组件,请使用

var browser = new IE();
browser.Visible = false;