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 好人&如果你遇到这个问题,你可以为你的目的使用。
请看下面这个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 好人&如果你遇到这个问题,你可以为你的目的使用。