Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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("点击成功");
        }
Пример #3
0
 /// <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不能为空");
     }
 }
Пример #4
0
 /// <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不能为空");
     }
 }
Пример #5
0
        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);
        }
Пример #6
0
        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;
                }
            }
        }
Пример #7
0
        /// <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);
        }
Пример #8
0
 //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);
 }
Пример #9
0
 public DownloadHandler(ExtChromiumBrowser browser)
 {
     _browser = browser;
 }
Пример #10
0
 public RequestHandler(ExtChromiumBrowser browser)
 {
     _browser = browser;
 }
Пример #11
0
        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;
                }));
            };
        }