質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

5513閲覧

WebViewを用いてブラウザを操作したい。

waou2010

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

1クリップ

投稿2020/07/02 23:05

前提・実現したいこと

C# で Windowsフォームアプリを作成しています。

webBrowserコントロールからデーターを取得したりデータを設定したりは次のように簡単に行うことができます。

IDがAからデータを取得
HtmlElement element = webBrowser1.Document.GetElementById("A");
textBox1.Text = element.InnerText;

IDがAへデータを渡す
HtmlElement usernameButton = webBrowser1.Document.GetElementById("A");
usernameButton.SetAttribute("value", "定形郵便");

今回、次のサイトを参考にwebBrowserの代わりにWebViewを用いてwebページを表示させました。
https://miko.info/?p=1372

このWebViewを使いwebBrowserと同じようにブラウザ上のコントロールの操作を行いたいのですが、WebViewのクラスを見てもHtmlElementのようなクラスはなく、途方に暮れてしまいました。

こうしたデータの取得、設定をWebViewで行うことはできないでしょうか。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ちょうど微妙な時期なのですが、WebView2(いわゆる Chromium Edge)がそろそろ正式リリースされるはずです(まだプレビュー)
既にWebViewにはObsoleteAttributeが付いており、あまり使わせたくないのかもしれません^^;
WebViewWebView2は互換性もなく非常に悩ましいです。

WebView2を試す場合は下記の上で、Microsoft.Web.WebView20.9.538-prereleaseにダウングレードしてください(理由は不明だがそうしないと手順通りにできない)
Microsoft Edge WebView 2 Windows フォームアプリ - Microsoft Edge Development | Microsoft Docs

使用例

cs

1using System; 2using System.Diagnostics; 3using System.Windows.Forms; 4using Microsoft.Toolkit.Forms.UI.Controls; 5using Microsoft.Toolkit.Win32.UI.Controls.Interop.WinRT; 6using Microsoft.Web.WebView2.Core; 7using Microsoft.Web.WebView2.WinForms; 8 9namespace Questions274706 10{ 11 public partial class Form1 : Form 12 { 13 private readonly WebView webView; // Warning CS0618 Obsolete付けるのはまだ早い気がするが^^; 14 private readonly WebView2 webView2; 15 16 public Form1() 17 { 18 InitializeComponent(); 19 20 var panel = new TableLayoutPanel 21 { 22 ColumnCount = 2, 23 RowCount = 1, 24 Dock = DockStyle.Fill, 25 }; 26 panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); 27 panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); 28 Controls.Add(panel); 29 30 webView = new WebView 31 { 32 Source = new Uri("https://teratail.com/questions/274706"), 33 Dock = DockStyle.Fill, 34 }; 35 webView.NavigationCompleted += WebView_NavigationCompleted; 36 panel.Controls.Add(webView, 0, 0); 37 38 39 webView2 = new WebView2 40 { 41 Source = new Uri("https://teratail.com/questions/274706"), 42 Dock = DockStyle.Fill, 43 }; 44 webView2.NavigationCompleted += WebView2_NavigationCompleted; 45 panel.Controls.Add(webView2, 1, 0); 46 } 47 48 private void WebView_NavigationCompleted(object sender, WebViewControlNavigationCompletedEventArgs e) 49 { 50 // InvokeScriptAsyncもある 51 var result = webView.InvokeScript("eval", new string[] { "document.getElementById('l-mainContents').innerText" }); 52 Debug.WriteLine(result); 53 54 var t = "定形郵便"; 55 webView.InvokeScript("eval", new string[] { $"document.getElementById('boxSearch-query').setAttribute('value','{t}');" }); 56 } 57 58 private async void WebView2_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e) 59 { 60 // ExecuteScriptはない 61 var result = await webView2.ExecuteScriptAsync("document.getElementById('l-mainContents').innerText"); 62 Debug.WriteLine(result); 63 64 var t = "定形郵便"; 65 await webView2.ExecuteScriptAsync($"document.getElementById('boxSearch-query').setAttribute('value','{t}');"); 66 } 67 } 68}

投稿2020/07/03 03:19

編集2023/07/22 08:21
TN8001

総合スコア9242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

waou2010

2020/07/03 07:24

WebView2について、了解いたしました。また、詳しい使用例大変参考になりました。トライして行きたいと思います。ありがとうございました。
guest

0

こうしたデータの取得、設定をWebViewで行うことはできないでしょうか。

WebView には WebBrowser で使った GetElementById などの直接 DOM 操作できるメソッド・プロパティは無いそうで、代わりに JavaScript のコードを使って Web ページを操作します。

ググるとやり方を書いた記事がいろいろヒットすると思います。例えば下記。

WebViewコントロールでの操作
https://web.biz-prog.net/readme/webview2.html

自分でもググってみてください。

投稿2020/07/03 01:17

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

waou2010

2020/07/03 07:27

JavaScriptについて、あくまでもJavaScriptのwebページに関する操作と勘違いしていました。 参考になりました。大変ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問