So-net無料ブログ作成

Edge仕様のWebBrowserコントロール(WebView) [VB.NET]

WebBrowserコントロールを使うとIE仕様になってしまい、サイトによってはJavaScriptが動かなかったりします。
そこで、WebBrowserコントロール(IE)ではなく、WebViewコントロール(Edge)を使用します。

実行環境が決まってるようで、このバージョン以降が必要のようです。
・Windows 10 1803
・Visual Studio 2017
・.NET Framework 4.6.2


Visual Studio 2017 を起動し、NuGet から次のパッケージをインストールします。
この文字列で検索すると見つかります。
「Microsoft.Toolkit.Forms.UI.Controls.WebView」

ツールボックスの「アイテムの選択」から「.NET Framework コンポーネント」タブを開き
次のパスのdllを参照から開きます。
C:\Users\<ユーザー名>\.nuget\packages\microsoft.toolkit.forms.ui.controls.webview\5.1.1\lib\net462\Microsoft.Toolkit.Forms.UI.Controls.WebView.dll


あとは、ツールボックスからWebViewコントロールをフォームに張り付けて完成。

フォームを開くとユーザーIDとパスワードが入力されてログインしたいときのサンプルプログラム
Imports Microsoft.Toolkit.Win32.UI.Controls.Interop.WinRT

Public Class frmMain
    Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        WebView1.Navigate("https://www.example.com/login.html")
    End Sub

    Private Sub WebView1_NavigationCompleted(sender As Object, e As WebViewControlNavigationCompletedEventArgs) Handles WebView1.NavigationCompleted

        If WebView1.DocumentTitle = "ログイン画面" Then
            Dim script As New System.Text.StringBuilder

            'ユーザーID uuuuu を入力
            script.AppendLine(String.Format("document.getElementsByName('UserId').item(0).value = '{0}';", "uuuuu"))
            'パスワード ppppp を入力
            script.AppendLine(String.Format("document.getElementsByName('Password').item(0).value = '{0}';", "ppppp"))

            WebView1.InvokeScript("eval", script.ToString())

            'ログインボタンを探してクリック
            script.Clear()
            script.AppendLine("for (i in document.getElementsByTagName('input')) {")
            script.AppendLine("    if (document.getElementsByTagName('input').item(i).value === 'ログイン') {")
            script.AppendLine("        document.getElementsByTagName('input').item(i).click();")
            script.AppendLine("    }")
            script.AppendLine("}")

            WebView1.InvokeScript("eval", script.ToString())
        End If

    End Sub
End Class


WebBrowserコントロールにあったDocumentプロパティが見当たらなくて
inputタグにどうやって値を入れるの?と、だいぶ困った。
WebViewコントロールはJavaScriptでhtmlを操作するようだ。

参考URL:WPFやWindowsフォームでEdgeのWebViewを使うには?[Windows 10 1803以降]:.NET TIPS - @IT
参考URL:【C#】WebBrowserコントロールをEdgeに対応させる | 思い立ったが吉日

さらにメモ
Chromium仕様のブラウザコントロール(CefSharp)もあるみたい。
参考URL:WinFormsでChromiumブラウザコンポーネント(CefSharp)を使ってみる
参考URL:VB.net(WinForms)でのCefsharpの基本的な扱い方について
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。