1

プログラム (WPF、C#) で金融口座の Web サイト (https) にログインし、口座データの一部を取得したいと考えています。このサイトは Cookie やその他のセッション検証を使用しているため、httpWebRequest ではなく Web ブラウザー コントロールを使用するのが最善の方法だと思います。画面の内容をキャプチャできないようです。

winforms を使用してこれを正常に実行できましたが、WPF で実行したいと考えています。以下は、winforms プロジェクトのコード スニペットです。

webBrowser1.Navigate( @"https://myfinancialaccountURL" );
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
                                                      wb1DocumentCompleted );

private void wb1DocumentCompleted( object sender, WebBrowserDocumentCompletedEventArgs e )
{
    string wb1LogonScreen = webBrowser1.DocumentText;

    --- process the data, etc.  ---
}

WPF の試行からのコード スニペットを次に示します。

webBrowser1.Navigated += new NavigatedEventHandler( webBrowser1_Navigated );
webBrowser1.Navigate( @"https:myfinancialaccountURL" );

私は WPF Web ブラウザー コントロールを広範囲に調査しました。これには Document プロパティがありますが、コンテンツ (または内部テキスト) を取得する方法がわかりません。

私はこれを調査しましたが、まだ答えを見つけることができません。さらに情報を提供する必要があるかどうか教えてください。ここで何か助けていただければ幸いです。

ありがとう

4

1 に答える 1

1

DocumentプロパティをMSHTML.Documentとして読み取り、それを使用してテキストを取得できます。プロジェクトにMicrosoft.mshtmlライブラリを含める必要があります。

  mshtml.HTMLDocument doc = null;
        string docState = string.Empty;

       // CODE TO ENSURE THAT THE DOCUMENT AND THE SCRIPTS HAVE LOADED
        Action getDocState = () =>
        {
            doc = wb.Document as mshtml.HTMLDocument;
            if (null != doc)
            {
                docState = doc.readyState;
            }
        };

        App.Current.Dispatcher.Invoke(
                    DispatcherPriority.Normal,
                    getDocState);


        if (null != doc)
        {
            while ((docState != "complete") && (docState != "interactive"))
            {
                // It should not take more than one or two iterations for the document to get loaded.
                Thread.Sleep(100);
                App.Current.Dispatcher.Invoke(
                    DispatcherPriority.Normal,
                    getDocState);
                }
            }
       // DOC SHOULD BE LOADED AND READABLE NOW

            // Go back to the UI thread to get more details
            if (!App.Current.Dispatcher.HasShutdownStarted)
            {
               // This line is of your interest here
                MessageBox.Show(doc.documentElement.innerHTML);
            }
        }

編集:ナビゲートされたイベントハンドラーでこのコードを使用できます。ドキュメントがコードをロードするのを待つ理由は、WPFのロード/ナビゲートが完了すると、WebブラウザがHTMLやスクリプトなどをロードするためです。このスクリプトにより、ドキュメントが完全にロードされ、操作できる状態になります。それ。

于 2013-01-22T17:49:46.607 に答える