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

本文关键字:声明 浏览器 线程 STAThreaded WatiN | 更新日期: 2023-09-27 18:35:25

我目前正在尝试使用 WatiN 进行一些自动数据收集。我曾经使用WebBrowser控件,我这样做的方式是我声明了一个stathread并从那里运行它,然后使用Browser.DocumentComplete启动了一个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 void 上使用浏览器实例时,它说它不知道它是什么,因为它是在线程内声明的。当我通过browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LoginPageLoaded);运行LoginPageLoaded时,我没有这样做,而且我显然无法在该STAThread之外声明浏览器。你认为我能做些什么来解决这个问题?

编辑 - 我失败了,太糟糕了...如果我在 STAthread 中做我需要做的所有事情,一切都会正常工作。我现在的问题是,在watin中,是否可以在没有实际具有网络浏览器的可视组件的情况下打开"网络浏览器"?

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

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

你可以无头运行 WebKit(例如 http://phantomjs.org/),但我不知道你是否可以从 WatiN 驱动它。

我猜你想隐藏网络浏览器窗口。在这种情况下,请尝试以下操作:

Settings.Instance.MakeNewIeInstanceVisible = false;

要在没有实际具有 Web 浏览器的可视组件的情况下打开"网络浏览器",请使用

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