如何在c#webview中单击按钮
我正在努力写一个c程序,可以自动点击网页上的按钮。我知道我可以使用chrome驱动程序,但我不希望它变成浏览器和特定版本的应用程序 这是我到目前为止想到的,但是我很难确定如何在找到正确的按钮后触发该按钮被单击如何在c#webview中单击按钮,c#,webview,C#,Webview,我正在努力写一个c程序,可以自动点击网页上的按钮。我知道我可以使用chrome驱动程序,但我不希望它变成浏览器和特定版本的应用程序 这是我到目前为止想到的,但是我很难确定如何在找到正确的按钮后触发该按钮被单击 WebView webView = new WebView(); var func = string.Format(@"document.getElementsByClassName('size-grid-button').innerText = '{0}';&q
WebView webView = new WebView();
var func = string.Format(@"document.getElementsByClassName('size-grid-button').innerText = '{0}';", size);
await webView.InvokeScriptAsync("eval", new string[] { func });
编辑
这是我当前基于项目的内容,但我找不到基于innerText的按钮,然后模拟按钮单击。下面是使用NuGet packageMicrosoft.Web.WebView2的完整代码示例(v.1.0.721-prerelease)。有关要求,请参阅Webview2发行说明 资源:
- 单击不带代码继续
- 在Visual Studio(VS)菜单中,单击 工具
- 选择选项
- 展开NuGet软件包管理器
- 单击常规
- 在包管理下,将
设置为默认包管理格式:
包参考
- 在Visual Studio(VS)菜单中,单击 工具
- 选择选项
- 展开NuGet软件包管理器
- 单击常规
- 在包管理下,将
设置为默认包管理格式:
包参考
- 在VS菜单中,单击文件
- 选择“新建”
- 选择项目
- 可选:使用以下选项限制显示的选择:C# Windows桌面
- 单击Windows窗体应用程序(.NET Framework)
- 单击下一步
- 输入项目名称(例如:WebView2Test),选择所需位置,并将Framework设置为版本>=4.6.2
- 单击创建
- 在VS菜单中,单击文件
- 选择“新建”
- 选择项目
- 展开Visual C#
- 单击Windows桌面
- 单击Windows窗体应用程序(.NET Framework)
- 输入项目名称(例如:WebView2Test),选择所需位置,并将Framework设置为版本>=4.6.2
- 单击确定
- 在VS菜单中,单击查看
- 选择解决方案资源管理器
- 在解决方案资源管理器中,单击鼠标右键
- 选择管理NuGet 套餐…
- 单击浏览
- 检查包括预发布
- 搜索:Microsoft.Web.WebView2
- 选择版本1.0.721-prerelease
- 通过单击屏幕左侧的向下箭头来设置所需的选项 “选项”显示可用选项(即:安装和更新选项 和卸载选项)
- 单击安装
- 如果弹出窗口,请单击确定
- 在解决方案资源管理器中,单击Form1.cs以选择它
- 在VS菜单中,单击查看
- 选择工具箱
- 展开所有Windows窗体
- 选择菜单提示
- 单击表单(Form1)将控件添加到表单中
- 在解决方案资源管理器中,单击Form1.cs以选择它
- 在VS菜单中,单击查看
- 选择工具箱
- 展开所有Windows窗体
- 选择状态条
- 单击表单(Form1)将控件添加到表单中
- 在解决方案资源管理器中,单击Form1.cs以选择它
- 在VS菜单中,单击查看
- 选择工具箱
- 展开所有Windows窗体
- 选择拆分容器
- 单击表单(Form1)将控件添加到表单中
- 在解决方案资源管理器中,单击Form1.cs以选择它
- 在VS菜单中,单击查看
- 选择工具箱
- 展开所有Windows窗体
- 选择按钮
- 单击表单(Form1)将控件添加到表单中。如有必要,移动到
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title></title> <script> function btnClickAction(name) { alert('button ' + name + ' was clicked'); } </script> </head> <body> <button type="button" class="size-grid-button" id="size-grid-button1" onclick="btnClickAction('size-grid-button1')">Click Me 1</button> <button type="button" class="size-grid-button" id="size-grid-button2" onclick="btnClickAction('size-grid-button2')">Click Me 2</button> <button type="button" class="size-grid-button" id="size-grid-button3" onclick="btnClickAction('size-grid-button3')" value="Click Me 3">Click Me 3</button> <input type="button" class="size-grid-button" id="size-grid-button4" onclick="btnClickAction('size-grid-button4')" value="Click Me 4" /> </body> </html>
<button type="button" class="size-grid-button" id="size-grid-button1" onclick="btnClickAction('size-grid-button1')">Click Me 1</button>
function clickDesiredButtonByInnerText(btnInnerText) { //let buttons = document.getElementByTagName('button'); let buttons = document.querySelectorAll('button'); let i = 0; let result = null; if (buttons) { for (i = 0; i < buttons.length; i++) { //window.chrome.webview.postMessage("button[" + i + "].innerText: " + buttons[i].innerText); if (buttons[i].innerText === btnInnerText) { buttons[i].click(); result = btnInnerText + ' clicked'; break; //exit loop } } } //window.chrome.webview.postMessage("result:" + result); return result; }
<input type="button" class="size-grid-button" id="size-grid-button4" onclick="btnClickAction('size-grid-button4')" value="Click Me 4" />
function clickDesiredInputButtonByTextValue(btnValue) { let i = 0; let result = null; buttons = document.querySelectorAll('input'); if (buttons) { for (i = 0; i < buttons.length; i++) { //window.chrome.webview.postMessage("button[" + i + "].value: " + buttons[i].value + ' type: ' + buttons[i].type); if (buttons[i].type === 'button' && buttons[i].value === btnValue) { buttons[i].click(); result = btnValue + ' clicked'; break; //exit loop } } } //window.chrome.webview.postMessage("result:" + result); return result; }
function clickDesiredButtonById(btnId) { let result = null; let desiredButton = document.getElementById(btnId); if (desiredButton) { desiredButton.click(); result = 'button with id = ' + btnId + ' clicked'; } //window.chrome.webview.postMessage("result:" + result); return result; }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Reflection; using System.Diagnostics;
public static class HelperLoadResource { public static string ReadResource(string filename) { //use UTF8 encoding as the default encoding return ReadResource(filename, Encoding.UTF8); } public static string ReadResource(string filename, Encoding fileEncoding) { string fqResourceName = string.Empty; string result = string.Empty; //get executing assembly Assembly execAssembly = Assembly.GetExecutingAssembly(); //get resource names string[] resourceNames = execAssembly.GetManifestResourceNames(); if (resourceNames != null && resourceNames.Length > 0) { foreach (string rName in resourceNames) { if (rName.EndsWith(filename)) { //set value to 1st match //if the same filename exists in different folders, //the filename can be specified as <folder name>.<filename> //or <namespace>.<folder name>.<filename> fqResourceName = rName; //exit loop break; } } //if not found, throw exception if (String.IsNullOrEmpty(fqResourceName)) { throw new Exception($"Resource '{filename}' not found."); } //get file text using (Stream s = execAssembly.GetManifestResourceStream(fqResourceName)) { using (StreamReader reader = new StreamReader(s, fileEncoding)) { //get text result = reader.ReadToEnd(); } } } return result; } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.WinForms; using System.Diagnostics;
private async Task InitializeCoreWebView2Async() { //initialize CorewWebView2 await webView21.EnsureCoreWebView2Async(); }
private async void Form1_Load(object sender, EventArgs e) { //show MS Edge version -- also ensures that an exception will be raised if proper MS Edge version isn't installed Debug.WriteLine(CoreWebView2Environment.GetAvailableBrowserVersionString()); //initialized CorewWebView2 await InitializeCoreWebView2Async(); //get HTML string html = HelperLoadResource.ReadResource("index.html"); //display HTML in WebView2 webView21.NavigateToString(html); }
private void webView21_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e) { //subscribe to CoreWebView2 events (add event handlers) webView21.CoreWebView2.WebMessageReceived += CoreWebView2_WebMessageReceived; }
private void CoreWebView2_WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs e) { Debug.WriteLine("Info: MSG (JSON): " + e.WebMessageAsJson); Debug.WriteLine("Info: MSG (String): " + e.TryGetWebMessageAsString()); }
private async Task ClickWebView2ButtonByInnerText(string btnInnerText) { if (webView21 != null && webView21.CoreWebView2 != null) { string jsCode = HelperLoadResource.ReadResource("TestButtonClick.js"); jsCode += System.Environment.NewLine; jsCode += "clickDesiredButtonByInnerText('" + btnInnerText + "');"; var result = await webView21.CoreWebView2.ExecuteScriptAsync(jsCode); Debug.WriteLine("result: " + result); } }
private async void btnClickButton_Click(object sender, EventArgs e) { await ClickWebView2ButtonByInnerText("Click Me 3"); }
private async Task ClickWebView2InputButton(string btnValue) { if (webView21 != null && webView21.CoreWebView2 != null) { string jsCode = HelperLoadResource.ReadResource("TestButtonClick.js"); jsCode += System.Environment.NewLine; jsCode += "clickDesiredInputButtonByTextValue('" + btnValue + "');"; var result = await webView21.CoreWebView2.ExecuteScriptAsync(jsCode); Debug.WriteLine("result: " + result); } }
private async void btnClickButton_Click(object sender, EventArgs e) { await ClickWebView2InputButton("Click Me 4"); }
private async Task ClickWebView2ButtonById(string btnId) { if (webView21 != null && webView21.CoreWebView2 != null) { string jsCode = HelperLoadResource.ReadResource("TestButtonClick.js"); jsCode += System.Environment.NewLine; jsCode += "clickDesiredButtonById('" + btnId + "');"; var result = await webView21.CoreWebView2.ExecuteScriptAsync(jsCode); Debug.WriteLine("result: " + result); } }
private async void btnClickButton_Click(object sender, EventArgs e) { await ClickWebView2ButtonById("size-grid-button2"); await ClickWebView2ButtonById("size-grid-button4"); }