Beispiel #1
0
        private void ChangeDisplayGecko(ListPagePattern currentPattern)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(lastTitleXPath))
                {
                    Gecko.DOM.XPathResult oldTemp  = geckoWebBrowser.Document.EvaluateXPath(lastTitleXPath);
                    GeckoNode[]           oldNodes = oldTemp.GetNodes().ToArray();
                    for (int i = 0; i < oldNodes.Length; i++)
                    {
                        GeckoElement toNoGreen = oldNodes[i] as GeckoElement;
                        toNoGreen.SetAttribute("style", ""); //将大框标为无色
                    }
                }

                Gecko.DOM.XPathResult temp  = geckoWebBrowser.Document.EvaluateXPath(currentPattern.Path.ItemRootXPath);
                GeckoNode[]           nodes = temp.GetNodes().ToArray();
                for (int i = 0; i < nodes.Length; i++)
                {
                    GeckoElement toGreen = nodes[i] as GeckoElement;
                    toGreen.SetAttribute("style", "border:1px solid #F00;background-color:#87CEEB;"); //将大框标为红框蓝底
                }
                lastTitleXPath = currentPattern.Path.ItemRootXPath;
            }
            catch { }
        }
Beispiel #2
0
        private void btn_Parser_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txt_url.Text))
            {
                MessageBox.Show("Pleasr input the url to parser.");
                return;
            }

            listPagePatterns = new List <ListPagePattern>();
            selectedPattern  = null;
            lastTitleXPath   = null;

            channelUrl = txt_url.Text;

            if (checkUseBrowser.IsChecked ?? false)
            {
                httpResult = SeleniumHelper.HttpRequest(channelUrl);
            }
            else
            {
                httpResult = HttpHelper.HttpRequest(channelUrl);
            }

            if (httpResult != null && httpResult.HttpCode == 200)
            {
                listPagePatterns = SmartParser.Extract_Patterns(channelUrl, httpResult.Content, MediaType.WebNews, Enums.Language.CHINESE);
                RefreshUI();
            }
        }
Beispiel #3
0
        private void btnModel_Checked(object sender, RoutedEventArgs e)
        {
            string checkedButton = ((RadioButton)sender).Name;

            if (checkedButton.Equals(selectedModel))
            {
                return;
            }

            if (checkedButton.Equals("btnModel1") && listPagePatterns.Count > 0)
            {
                selectedPattern = listPagePatterns[0];
            }
            else if (checkedButton.Equals("btnModel2") && listPagePatterns.Count > 1)
            {
                selectedPattern = listPagePatterns[1];
            }
            else if (checkedButton.Equals("btnModel3") && listPagePatterns.Count > 2)
            {
                selectedPattern = listPagePatterns[2];
            }
            else if (checkedButton.Equals("btnModel4") && listPagePatterns.Count > 3)
            {
                selectedPattern = listPagePatterns[3];
            }
            else if (checkedButton.Equals("btnModel5") && listPagePatterns.Count > 4)
            {
                selectedPattern = listPagePatterns[4];
            }

            txtBaseXpath.Text = selectedPattern.Path?.ItemRootXPath;
            ChangeSelectedXpath();
            ChangeDisplayGecko(selectedPattern);

            selectedModel = checkedButton;
        }
Beispiel #4
0
        private void RefreshUI()
        {
            selectedPattern = null;

            if (string.IsNullOrEmpty(channelUrl) || listPagePatterns == null)
            {
                this.Dispatcher.Invoke(new Action(() => {
                    //控制浏览区与判断区样式
                    geckoFormHost.IsEnabled = false;
                    geckoWebBrowser.Navigate("about:blank");
                    geckoWebBrowser.IsAccessible = false;
                    btnRight.IsEnabled           = false;
                    btnWrong.IsEnabled           = false;

                    //清除表格和下拉框样式与数据
                    dataGridItems.IsEnabled  = false;
                    cmbUrlXpath.IsEnabled    = false;
                    cmbTitleXpath.IsEnabled  = false;
                    cmbTimeXpath.IsEnabled   = false;
                    cmbAuthorXpath.IsEnabled = false;

                    cmbUrlXpath.Items.Clear();
                    cmbTitleXpath.Items.Clear();
                    cmbTimeXpath.Items.Clear();
                    cmbAuthorXpath.Items.Clear();

                    //清除模式选择按钮状态
                    btnModel1.IsChecked = false;
                    btnModel2.IsChecked = false;
                    btnModel3.IsChecked = false;
                    btnModel4.IsChecked = false;
                    btnModel5.IsChecked = false;

                    btnModel1.IsEnabled = false;
                    btnModel2.IsEnabled = false;
                    btnModel3.IsEnabled = false;
                    btnModel4.IsEnabled = false;
                    btnModel5.IsEnabled = false;
                }));
            }
            else
            {
                this.Dispatcher.Invoke(new Action(() =>
                {
                    //启用浏览区域与操作区域,加载缓存的网页
                    geckoFormHost.IsEnabled = true;
                    try
                    {
                        if (geckoWebBrowser.Url != new Uri(channelUrl))
                        {
                            geckoWebBrowser.Navigate(channelUrl);
                        }
                    }
                    catch { }
                    geckoWebBrowser.IsAccessible = true;
                    btnRight.IsEnabled           = true;
                    btnWrong.IsEnabled           = true;

                    cmbUrlXpath.Items.Clear();
                    cmbTitleXpath.Items.Clear();
                    cmbTimeXpath.Items.Clear();
                    cmbAuthorXpath.Items.Clear();

                    //在 listPatterns 不为 null 的情况下绑定第一个模式的数据
                    if (listPagePatterns != null && listPagePatterns.Count > 0)
                    {
                        selectedPattern = listPagePatterns[0];
                        cmbUrlXpath.Items.Add(selectedPattern.Path.UrlXPath);
                        cmbTitleXpath.Items.Add(selectedPattern.Path.TitleXPath);

                        cmbTimeXpath.Items.Add(selectedPattern.Path.DateXPath ?? "");
                        //获取备选的时间模式
                        if (selectedPattern.BackUpPaths.ContainsKey(PatternType.Date))
                        {
                            List <string> tempPaths = selectedPattern.BackUpPaths[PatternType.Date];
                            //判断是否为空,以及是否和当选的Xpath相同
                            if (tempPaths != null)
                            {
                                foreach (string tempPath in tempPaths)
                                {
                                    if (!string.IsNullOrEmpty(tempPath) && !tempPath.Equals(selectedPattern.Path.DateXPath))
                                    {
                                        cmbTimeXpath.Items.Add(tempPath);
                                    }
                                }
                            }
                        }
                        if (!string.IsNullOrEmpty(selectedPattern.Path.DateXPath))
                        {
                            cmbTimeXpath.Items.Add("");
                        }

                        cmbAuthorXpath.Items.Add(selectedPattern.Path.AuthorXPath ?? "");
                        //获取备选的作者模式
                        if (selectedPattern.BackUpPaths.ContainsKey(PatternType.Author))
                        {
                            List <string> tempPaths = selectedPattern.BackUpPaths[PatternType.Author];
                            //判断是否为空,以及是否和当选的Xpath相同
                            if (tempPaths != null)
                            {
                                foreach (string tempPath in tempPaths)
                                {
                                    if (!string.IsNullOrEmpty(tempPath) && !tempPath.Equals(selectedPattern.Path.AuthorXPath))
                                    {
                                        cmbAuthorXpath.Items.Add(tempPath);
                                    }
                                }
                            }
                        }
                        if (!string.IsNullOrEmpty(selectedPattern.Path.AuthorXPath))
                        {
                            cmbAuthorXpath.Items.Add("");
                        }

                        cmbUrlXpath.SelectedIndex    = 0;
                        cmbTitleXpath.SelectedIndex  = 0;
                        cmbTimeXpath.SelectedIndex   = 0;
                        cmbAuthorXpath.SelectedIndex = 0;
                        txtBaseXpath.Text            = selectedPattern.Path?.ItemRootXPath;

                        var contents = XpathParser.ParseList(httpResult.Content, JsonConvert.SerializeObject(selectedPattern.Path), channelUrl);
                        //绑定出事DataGrid
                        dataGridItems.ItemsSource = contents.Articles;
                    }

                    //启用表格和下拉框
                    dataGridItems.IsEnabled  = true;
                    cmbUrlXpath.IsEnabled    = false;
                    cmbTitleXpath.IsEnabled  = true;
                    cmbTimeXpath.IsEnabled   = true;
                    cmbAuthorXpath.IsEnabled = true;

                    //根据数据情况确定模式按钮的可用性
                    btnModel1.IsEnabled = listPagePatterns.Count > 0;
                    btnModel2.IsEnabled = listPagePatterns.Count > 1;
                    btnModel3.IsEnabled = listPagePatterns.Count > 2;
                    btnModel4.IsEnabled = listPagePatterns.Count > 3;
                    btnModel5.IsEnabled = listPagePatterns.Count > 4;

                    btnModel1.IsChecked = true;
                    btnModel2.IsChecked = false;
                    btnModel3.IsChecked = false;
                    btnModel4.IsChecked = false;
                    btnModel5.IsChecked = false;

                    ChangeDisplayGecko(selectedPattern);
                }));
            }
        }