/// <summary>
        /// XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_XPathQuery_Click(object sender, RoutedEventArgs e)
        {
            TextRange tr   = new TextRange(rbox_XPathInput.Document.ContentStart, rbox_XPathInput.Document.ContentEnd);
            var       html = tr.Text;

            if (string.IsNullOrEmpty(html))
            {
                EMessageBox.Show("请输入html");
                return;
            }

            var result = HtmlAgilityPackUtil.XPathQuery(html, this.tbox_XPath.Text.Trim());

            if (result != null)
            {
                Paragraph paragraph = new Paragraph();
                foreach (var item in result)
                {
                    paragraph.Inlines.Add(new Run(item.OuterHtml + Environment.NewLine));
                }
                this.rbox_XPathOutput.Document = new FlowDocument(paragraph);
            }
            else
            {
                this.rbox_XPathOutput.Document.Blocks.Clear();
            }
        }
Example #2
0
        private async void ExtractBackgroundImage(object html)
        {
            //我这里是写的div,可能页面上用来显示图片的不一定是div,是其它元素也说不定,如li ol ul
            var xpath  = "//div";
            var result = HtmlAgilityPackUtil.XPathQuery(html.ToString(), xpath);

            foreach (var item in result)
            {
                var classAttribute = item.Attributes["class"];
                if (classAttribute == null)
                {
                    continue;
                }

                var className = classAttribute.Value;

                var script = $"getComputedStyle(document.getElementsByClassName('{className}')[0]).backgroundImage";
                //执行js
                var backgroundImage = await globalData.Browser.browser.EvaluateScriptAsync(script);

                if (backgroundImage.Result != null && backgroundImage.Result.ToString() != "none")
                {
                    var mathch = RegexUtil.RegexMatch(backgroundImage.Result.ToString(), RegexPattern.MatchImgPattern);
                    if (mathch.Success)
                    {
                        lock (obj)
                        {
                            Dispatcher.Invoke(() =>
                            {
                                backgroundImageList.Add(mathch.Value);
                                ShowStatusText($"已抓取到{backgroundImageList.Count}个图像");
                            });
                        }
                    }
                }
            }

            if (backgroundImageList.Count == 0)
            {
                ShowStatusText("解析已完成,未抓取到任何图像");
            }
        }