/// <summary> /// 获取html内容 /// </summary> /// <param name="chromiumWebBrowser">CefSharp的webbrowser</param> /// <returns></returns> public static async Task <string> GetHtmlSource(ExtChromiumBrowser chromiumWebBrowser) { string htmlStr = string.Empty; await chromiumWebBrowser.GetSourceAsync().ContinueWith(taskHtml => { htmlStr = taskHtml.Result; }); return(htmlStr); }
/// <summary> /// 给Input赋值 /// </summary> /// <param name="chromiumWebBrowser">CefSharp的webbrowser</param> /// <param name="name">根据控件的名称</param> /// <param name="innerHtml">内部html包含***</param> /// <param name="outHtml">外部html包含***</param> public static string SetValueByName(ExtChromiumBrowser chromiumWebBrowser, string name, string value, SearchType searchType = SearchType.ControlName, string innerHtml = "", string outHtml = "") { string js = string.Empty; string forStr = string.Empty; if (name.Length > 0) { if (innerHtml.Length > 0) { forStr = "if(eleAug[i].innerText.indexOf('" + innerHtml + "') != -1) "; } if (outHtml.Length > 0) { forStr = "if(eleAug[i].outerText.indexOf('" + outHtml + "') != -1) "; } string searchjs = string.Empty; switch (searchType) { case SearchType.ControlName: { searchjs = " var eleAug= document.getElementsByName('" + name + @"');"; } break; case SearchType.ClassName: { searchjs = " var eleAug= document.getElementsByClassName('" + name + @"');"; } break; case SearchType.TagName: { searchjs = " var eleAug= document.getElementsByTagName('" + name + @"');"; } break; } js = @"( function() { " + searchjs + @" if(eleAug!=null) { for(var i=0;i< eleAug.length;i++) { " + forStr + @" { ele.value='" + value + @"';} } } } )()"; } else { return("名称不能为空"); } ExecuteJs(chromiumWebBrowser, js); return("点击成功"); }
/// <summary> /// 给input赋值 /// </summary> /// <param name="chromiumWebBrowser">CefSharp的webbrowser</param> /// <param name="id">根据id</param> public static string SetValueById(ExtChromiumBrowser chromiumWebBrowser, string id, string value) { if (id.Length > 0) { string js = @"( function() { var ele= document.getElementById('" + id + @"'); if(ele!=null) { ele.value='" + value + @"'; } } )()"; ExecuteJs(chromiumWebBrowser, js); return("赋值成功"); } else { return("id不能为空"); } }
/// <summary> /// 点击按钮 /// </summary> /// <param name="chromiumWebBrowser">CefSharp的webbrowser</param> /// <param name="id">根据id</param> public static string ClickButtonById(ExtChromiumBrowser chromiumWebBrowser, string id) { if (id.Length > 0) { string js = @"( function() { var ele= document.getElementById('" + id + @"'); if(ele!=null) { ele.click(); } } )()"; ExecuteJs(chromiumWebBrowser, js); return("点击成功"); } else { return("id不能为空"); } }
public BrowserCtrl() { InitializeComponent(); if (DesignerProperties.GetIsInDesignMode(this)) { return; } this.Loaded += BrowserCtrl_Loaded; lock (_lockObject) { if (!_isCefInited) { _isCefInited = true; InitCef(); //初始化CefSharp } } _browser = new ExtChromiumBrowser(); BindBrowser(_browser); grid.Children.Add(_browser); }
private async Task GetSTSQData(ExtChromiumBrowser chromiumWebBrowser) { int topic_index = 0; while (!cts.Token.IsCancellationRequested) { topic_index++; var topic_type = string.Empty; var topic = string.Empty; try { await Task.Delay(300); string html = await CefWebBrowserControl.GetHtmlSource(chromiumWebBrowser); HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(html); //html字符串 //获取标签里的值select-left pull-left options-w var enable = doc.DocumentNode.SelectSingleNode("//div[@class='btn_ct tb']/span[2]"); if (enable.Attributes["disabled"] != null && enable.Attributes["disabled"].Value.Equals("disabled")) { break; } topic_type = doc.DocumentNode.SelectSingleNode("//div[@class='test_style']").InnerText.Split(new char[2] { '【', '】' })[1]; //topic_index = doc.DocumentNode.SelectSingleNode("//span[@class='topic-type']/following-sibling::span").InnerText.Replace("\\n", "").Split('/')[1]; topic = doc.DocumentNode.SelectSingleNode("//div[@class='swiper-slide swiper-slide-active']/div[@class='test_title']/span").InnerHtml; if ("单选题 多选题 判断题 不定项选择题 排序题".Contains(topic_type)) { var answers = doc.DocumentNode.SelectNodes("//div[@class='test_bot']/dl"); CefWebBrowserControl.ClickButtonByJsPath(chromiumWebBrowser, @"document.querySelector('div.test_bot').children[0].children[0].click()"); await Task.Delay(200); listBox1.Items.Add($"[{ topic_type}]"); listBox1.Items.Add($"{topic_index}、{topic}"); foreach (var item in answers) { string value1 = item.SelectSingleNode("./span").InnerText; string value2 = item.InnerText; listBox1.Items.Add($"{value1}{value2}"); } } var answerRight = doc.DocumentNode.SelectSingleNode("//span[@class='rightAnswer']").InnerText; var answerAnalysis = doc.DocumentNode.SelectSingleNode("//div[@class='answerText']/div[4]").InnerHtml; listBox1.Items.Add("答案:" + answerRight); listBox1.Items.Add(answerAnalysis); CefWebBrowserControl.ClickButtonByJsPath(chromiumWebBrowser, @"document.querySelector('div.test_bot').lastElementChild.firstElementChild.click()"); } catch (Exception ex) { listBox1.Items.Add($"错误行:{topic_type},{topic_index},{topic}"); cts?.Cancel(); break; } } }
/// <summary> /// 执行JS /// </summary> /// <param name="chromiumWebBrowser">wpf版本的ExtChromiumBrowser</param> /// <param name="js"></param> public static void ExecuteJs(ExtChromiumBrowser chromiumWebBrowser, string js) { var frame = chromiumWebBrowser.GetMainFrame(); frame.EvaluateScriptAsync(js); }
//document.querySelector("#body > div > div > div.form-main > form > div > div:nth-child(1) > div > div > div > input").value="18126015434" //document.querySelector("#body > div > div > div.form-main > form > div > div:nth-child(2) > div > div > div > input").value="yl123456" //document.querySelector("#body > div > div > div.form-main > form > div > div.mb20 > button") public static void ClickButtonByJsPath(ExtChromiumBrowser chromiumWebBrowser, string JsPath) { ExecuteJs(chromiumWebBrowser, JsPath); }
public DownloadHandler(ExtChromiumBrowser browser) { _browser = browser; }
public RequestHandler(ExtChromiumBrowser browser) { _browser = browser; }
private void BindBrowser(ExtChromiumBrowser browser) { _jsObject = new JSObject(); CefSharpSettings.LegacyJavascriptBindingEnabled = true; CefSharpSettings.WcfEnabled = true; browser.JavascriptObjectRepository.Register("jsObj", _jsObject, isAsync: false, options: BindingOptions.DefaultBinder); browser.IsBrowserInitializedChanged += (ss, ee) => { LoadUrl(); }; browser.FrameLoadStart += (ss, ee) => { this.Dispatcher.BeginInvoke(new Action(() => { (ss as ExtChromiumBrowser).Focus(); })); }; browser.FrameLoadEnd += (ss, ee) => { this.Dispatcher.BeginInvoke(new Action(() => { loadingWait.Visibility = Visibility.Collapsed; })); if (FrameLoadEnd != null) { FrameLoadEnd(null, null); } }; browser.KeyDown += (ss, ee) => { if (ee.Key == Key.F5) { try { browser.Reload(); } catch (Exception ex) { LogUtil.Error(ex, "ExtChromiumBrowser Reload error"); } } }; browser.PreviewTextInput += (o, e) => { foreach (var character in e.Text) { // 把每个字符向浏览器组件发送一遍 browser.GetBrowser().GetHost().SendKeyEvent((int)WM.CHAR, (int)character, 0); } // 不让cef自己处理 e.Handled = true; }; browser.LoadError += (s, e) => { this.Dispatcher.BeginInvoke(new Action(() => { loadingWait.Visibility = Visibility.Collapsed; })); }; }