操作:鼠標左鍵點擊,“導入文件”按鈕,在彈出框中選擇導入文件。
需要解決2個問題:
1.模擬操作時,自動選擇上傳文件。
2.模擬鼠標左鍵點擊上傳按鈕。(單純使用js,jq模擬click無法上傳文件)
問題一: 重寫 IDialogHandler 接口
internal sealed class DialogHandler : IDialogHandler { public string path { get; set; }
public DialogHandler(string path) { this.path = path; } public bool OnFileDialog(IWebBrowser chromiumWebBrowser, IBrowser browser, CefFileDialogMode mode, CefFileDialogFlags flags, string title, string defaultFilePath, List<string> acceptFilters, int selectedAcceptFilter, IFileDialogCallback callback) { string[] filePaths = new string[1]; filePaths[0] = path; callback.Continue(0, filePaths.ToList()); return true;//return false;--false是取消的問題 } }
應用該重寫接口
browser.DialogHandler = new DialogHandler(path); //path可以為窗體程序中,設置一個選擇文件的功能,獲取選中文件的路徑
問題二:利用IBrowserHost對象,發送模擬點擊操作
難點:需要知道目標按鈕在模擬瀏覽器中的x,y坐標。
//鼠標左鍵點擊
var host = browser.GetBrowser().GetHost();
//鼠標單次點擊,需要按下並松開,所以需要兩個指令,false為按下,true為松開 host.SendMouseClickEvent(x, y, MouseButtonType.Left, false, 1, CefEventFlags.None); Thread.Sleep(300); host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None);