winforms - .NET Windows 窗体 - 与从 webview2 打开的网站文件对话框交互
问题描述
我在 .NET Framework Windows 窗体应用程序中使用 webview2 自动将文件上传到网站。该网站一次只支持上传一个文件,我们经常需要上传数百个文件。我在 webview2 中使用了 java 脚本来执行上传的步骤。
我的问题是,要指定要上传的文件,我必须与在 webview 中的网站单击按钮时打开的文件对话框进行交互。我目前正在使用 SendKeys 在文件对话框中填充要上传的文件的路径,我认为这是一个糟糕的过程。
有没有一种方法可以与通过我的 Windows 窗体应用程序从网站创建的文件对话框进行交互?如果是这样,我将如何开始弄清楚如何做到这一点?
以下是有关我目前正在做的事情的更多详细信息:
在 web 视图中,要开始上传,您必须单击几个复选框来选择上传选项,每次都必须这样做,所以我首先运行这些命令:
await webview2.ExecuteScriptAsync($"document.getElementById('SelectedTypeId').click();");
await webview2.ExecuteScriptAsync($"document.getElementById('AutoAcceptChkbox').click();");
然后,有一个命令可以单击上传按钮,这会打开一个文件对话框:
await webview2.ExecuteScriptAsync($"document.getElementById('uploadFile').click();");
从这里,我得到文件对话框并使用 SendKeys.Send("Filepath to file") 和 SendKeys.Send("{ENTER}") 填充文件路径并选择文件。
文件对话框关闭后,我有一个附加命令可以单击导入按钮开始导入。
我遇到的问题是文件对话框。使用 SendKeys 填充文件的路径显然不是一个很好的过程。另外,我必须让应用程序在 sendkeys 操作周围“等待”,以便文件对话框有时间在继续前进之前出现并关闭,我敢打赌,如果应用程序没有等待很长时间,就会出现错误足够的。
解决方案
推荐阅读
- docker - 如何将 docker 数据容器带入 Kubernetes?
- c - 如果枚举是编译时间,那么#define with Enums 是如何工作的?
- c - 无法理解这个 C 程序的工作原理?
- reactjs - React 渲染中的 setInterval 和 CPU 使用率
- php - yii2 使用查询字符串数组创建链接
- javascript - 用于抓取图像的无头 chrome 最大限度地利用 CPU(即 100%)
- javascript - Jest Test 中的触发事件不调用 Method
- swift - 相同的cornerRadius 在视图下方可见
- xslt - 如何在xslt中使用大于和小于
- powershell - Clear-RecycleBin cmdlet 的进度条输出显示不正确