Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#webview中单击按钮_C#_Webview - Fatal编程技术网

如何在c#webview中单击按钮

如何在c#webview中单击按钮,c#,webview,C#,Webview,我正在努力写一个c程序,可以自动点击网页上的按钮。我知道我可以使用chrome驱动程序,但我不希望它变成浏览器和特定版本的应用程序 这是我到目前为止想到的,但是我很难确定如何在找到正确的按钮后触发该按钮被单击 WebView webView = new WebView(); var func = string.Format(@"document.getElementsByClassName('size-grid-button').innerText = '{0}';&q

我正在努力写一个c程序,可以自动点击网页上的按钮。我知道我可以使用chrome驱动程序,但我不希望它变成浏览器和特定版本的应用程序

这是我到目前为止想到的,但是我很难确定如何在找到正确的按钮后触发该按钮被单击

    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发行说明

资源

注意:此示例将使用WinForms--Windows窗体应用程序(.NET Framework)。使用.NET Framework时,支持>=4.6.2的版本(以前需要4.6.2或更高版本。但是,如果查看NuGet软件包文件夹,现在所需的最低版本可能是4.5。有关详细信息,请参阅发行说明)。有关其他受支持的SDK,请参阅文档

支持Visual Studio 2017版和2019版。如果你两个都没有,你可以——这是免费的

下载并安装Microsoft Edge Dev(又称“开发频道”):--有关其他选项,请参阅文档

开放式Visual Studio-(2017或2019年)

默认软件包管理格式设置为软件包参考(这是可选的,但建议使用)。有关更多信息,请参阅

2019年

  • 单击不带代码继续
  • 在Visual Studio(VS)菜单中,单击 工具
  • 选择选项
  • 展开NuGet软件包管理器
  • 单击常规
  • 包管理下,将
    默认包管理格式:
    设置为
    包参考
2017

  • 在Visual Studio(VS)菜单中,单击 工具
  • 选择选项
  • 展开NuGet软件包管理器
  • 单击常规
  • 包管理下,将
    默认包管理格式:
    设置为
    包参考
创建新项目

2019年

  • 在VS菜单中,单击文件
  • 选择“新建”
  • 选择项目
  • 可选:使用以下选项限制显示的选择:C# Windows桌面
  • 单击Windows窗体应用程序(.NET Framework)
  • 单击下一步
  • 输入项目名称(例如:WebView2Test),选择所需位置,并将Framework设置为版本>=4.6.2
  • 单击创建
2017

  • 在VS菜单中,单击文件
  • 选择“新建”
  • 选择项目
  • 展开Visual C#
  • 单击Windows桌面
  • 单击Windows窗体应用程序(.NET Framework)
  • 输入项目名称(例如:WebView2Test),选择所需位置,并将Framework设置为版本>=4.6.2
  • 单击确定
将Microsoft.Web.WebView2添加到项目中(2019/2017)

  • 在VS菜单中,单击查看
  • 选择解决方案资源管理器
  • 在解决方案资源管理器中,单击鼠标右键
  • 选择管理NuGet 套餐…
  • 单击浏览
  • 检查包括预发布
  • 搜索:Microsoft.Web.WebView2
  • 选择版本1.0.721-prerelease
  • 通过单击屏幕左侧的向下箭头来设置所需的选项 “选项”显示可用选项(即:安装和更新选项 和卸载选项)
  • 单击安装
  • 如果弹出窗口,请单击确定
可选:将菜单提示添加到表单(Form1)

  • 在解决方案资源管理器中,单击Form1.cs以选择它
  • 在VS菜单中,单击查看
  • 选择工具箱
  • 展开所有Windows窗体
  • 选择菜单提示
  • 单击表单(Form1)将控件添加到表单中
可选:将StatusStrip添加到表单(Form1)

  • 在解决方案资源管理器中,单击Form1.cs以选择它
  • 在VS菜单中,单击查看
  • 选择工具箱
  • 展开所有Windows窗体
  • 选择状态条
  • 单击表单(Form1)将控件添加到表单中
将拆分容器添加到表单中(表单1)

  • 在解决方案资源管理器中,单击Form1.cs以选择它
  • 在VS菜单中,单击查看
  • 选择工具箱
  • 展开所有Windows窗体
  • 选择拆分容器
  • 单击表单(Form1)将控件添加到表单中
将按钮添加到SplitContainer的左面板(splitContainer1)

  • 在解决方案资源管理器中,单击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");
    }