Webview2 ExecuteScriptAsync 单击输入按钮

Webview2 ExecuteScriptAsync to click an Input button

请看下面这个html代码来理解:

<input type="submit" name="send" class="button" value="Send" onclick="return ussd_send()">
<input type="submit" name="send" class="button" value="Disconnect" onclick="return ussd_exit()">

我想点击 Send 按钮,但我使用的代码没有任何效果:

webView21.ExecuteScriptAsync("document.getElementsByClassName('return ussd_send()').click();");

您可以使用 Document.querySelectorAll() 找到您的按钮。
它使用标准 CSS Attribute selector 作为输入:

string inputButtonValue = "Send";
// Or string inputButtonValue = "Disconnect";
var func = $"document.querySelectorAll('input[value=\"{inputButtonValue}\"]')[0].click();";
var result = await webView21.CoreWebView2.ExecuteScriptAsync(func);

兼容的替代方法是循环 Document.getElementsByTagName() 的结果,returns HTML 个元素的集合:

string inputButtonValue = "Send";
var func = "var elms = document.getElementsByTagName('INPUT'); " +
    "for (var i = 0; i < elms.length; i++) {" +
        $"if (elms[i].value == '{inputButtonValue}') {{ " +
            "elms[i].click(); break;" +
        "};" +
    "};";

var result = await webView21.CoreWebView2.ExecuteScriptAsync(func);

您也可以使用WebView2.ExecuteScriptAsync() instead of CoreWebView2.ExecuteScriptAsync(),但前者与 WinForms 绑定,后者则不然。以防便携性在某些时候成为问题。
您应该等待这些方法,如此处所示(因为两者都是异步的),但如果您不需要评估 result.

则不是绝对必要的
webView21.ExecuteScriptAsync("document.getElementsByName('send')[0].click();");

这解决了我的问题,这给了我 poul bak 的答案。

Poul Bak 好人&如果你遇到这个问题,你可以为你的目的使用。