2012-05-24 52 views
1

我目前正在嘗試使用WatiN來執行一些自動數據收集。我曾經使用過一個WebBrowser控件,我做的方式是我聲明一個stathread並從那裏運行它,然後使用Browser.DocumentCompleted我開始了一個void LoginPageLoaded我將設置用戶並傳遞並登錄。事情是,與華廷,我試圖做WatiN需要在STAThreaded線程之外聲明瀏覽器

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

但很明顯,當我嘗試使用在LoginPageLoaded的瀏覽器實例作廢了說,它downs't知道它是什麼,因爲它被宣佈裏面th線程。當我通過browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LoginPageLoaded);運行LoginPageLoaded時,我沒有這樣做,而且我顯然不能在該STAThread之外聲明瀏覽器。你認爲我能做些什麼來解決這個問題?

編輯 - 我失敗了,如此糟糕......如果我在STA線程中做了所有我需要做的事情,那麼一切都會奏效。現在我的問題是,在watin中,是否有打開「瀏覽器」而沒有瀏覽器的可視化組件?

+0

也許WebClient類? –

+3

將問題編輯成完全不同的問題是一個不錯的主意,特別是如果已經有對舊問題的答案。首先,它從答案中刪除上下文。其次,你通過搜索失去了老問題的歷史。總是問一個新問題。 –

回答

0

你可以嘗試使用NHtmlUnit,它是一個無頭瀏覽器。我不確定你是否可以用WatiN做到這一點。

0

您可以運行WebKit無頭(例如參見http://phantomjs.org/),但我不知道是否可以從WatiN驅動它。

+0

請您詳細說明我可以如何從我的c#應用程序登錄到網頁usinc phantomjs?我只是在學習c#。 – HolyThunder

0

我想你想隱藏網頁瀏覽器窗口。 在這種情況下,試試這個:

Settings.Instance.MakeNewIeInstanceVisible = false; 
0

要打開「網頁瀏覽器」實際上不具有網頁瀏覽器的可視化組件,使用

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