Esempio n. 1
0
        private void btnExport_Click(object sender, EventArgs e)
        {
            // 浏览器刚打开, 还没有开始抓取网页
            var id = this.cbxBookConfig.SelectedValue as int? ?? 0;

            if (id <= 0)
            {
                Console.WriteLine("请选择导出的书名");
                return;
            }

            if (cbxBookConfig.DataSource is List <Book> books)
            {
                var book = books.FirstOrDefault(x => x.Id == id);
                Console.WriteLine("正在导出,请稍后");
                Task.Factory.StartNew(() =>
                {
                    BooksUtils.ExportBooks(new List <Book> {
                        book
                    });
                    var exportDir = Environment.CurrentDirectory + "\\ExportBooks";
                    Console.WriteLine($"导出完成,{exportDir}");
                    System.Diagnostics.Process.Start("explorer.exe", exportDir);
                });
            }
        }
Esempio n. 2
0
        private void CrawlerRuleForm_Load(object sender, EventArgs e)
        {
            cbxChapterTitleType.SelectedIndex = 0;
            var bookConfigs = BooksUtils.GetAllBookConfig();

            cbxBookName.DataSource    = bookConfigs;
            cbxBookName.DisplayMember = nameof(Book.BookName);
            cbxBookName.ValueMember   = nameof(Book.Id);

            var rules = CrawlerRuleUtils.GetAllCrawlerRules();

            cbxSelectedRule.DataSource    = rules;
            cbxSelectedRule.DisplayMember = nameof(CrawlerRule.RuleName);

            if (bookConfigs.Count > 0)
            {
                var book = bookConfigs.FirstOrDefault();
                cbxBookName.Text     = book.BookName;
                txtAuthor.Text       = book.Author;
                cbxSelectedRule.Text = book.CrawlerRuleName;
                txtStartUrl.Text     = book.StartUrl;
            }

            cbxRuleName.DataSource    = JsonConvert.DeserializeObject <List <CrawlerRule> >(JsonConvert.SerializeObject(rules));
            cbxRuleName.DisplayMember = nameof(CrawlerRule.RuleName);
        }
Esempio n. 3
0
        public IViewComponentResult Invoke()
        {
            IEnumerable <BooksCountByCategory> bookCountList =
                BooksUtils.GetBooksCount(m_booksRepo);

            return(View(bookCountList));
        }
Esempio n. 4
0
        private void btnEditRule_Click(object sender, EventArgs e)
        {
            var crawlerRuleForm = new CrawlerRuleForm();

            crawlerRuleForm.ShowDialog();

            var bookConfigs = BooksUtils.GetAllBookConfig();

            bookConfigs.ForEach(x =>
            {
                x.BookName = $"{x.BookName}-{x.Author}";
            });
            cbxBookConfig.DataSource    = bookConfigs;
            cbxBookConfig.DisplayMember = nameof(Book.BookName);
            cbxBookConfig.ValueMember   = nameof(Book.Id);
            cbxBookConfig.SelectedIndex = 0;

            this.cbxBookConfig.Tag = CrawlerRuleUtils.GetAllCrawlerRules();
        }
Esempio n. 5
0
        //初始化浏览器并启动
        public void InitializeChromium()
        {
            CefSettings settings = new CefSettings();

            // 启用缓存和cookie
            settings.CachePath             = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\Cache";
            settings.PersistSessionCookies = true;

            // trojan go 客户端代理端口可以在配置文件中修改
            settings.CefCommandLineArgs.Add("proxy-server", "socks5://127.0.0.1:1082");

            // dir是Trojan go客户端配置文件的目录
            SharpProxyTrojanGo.Start(Environment.CurrentDirectory + "/libs");

            // Initialize cef with the provided settings
            Cef.Initialize(settings);
            // Create a browser component
            chromeBrowser = new ChromiumWebBrowser("https://www.google.com/");
            // Add it to the form and fill it to the form window.
            this.panelBrowser.Controls.Add(chromeBrowser);
            chromeBrowser.Dock            = DockStyle.Fill;
            chromeBrowser.LifeSpanHandler = new OpenPageSelf(); // 不用新窗口打开url
            chromeBrowser.KeyboardHandler = new CefKeyBoardHander();
            this.Width  = 1024;
            this.Height = 800;

            var bookConfigs = BooksUtils.GetAllBookConfig();

            bookConfigs.ForEach(x =>
            {
                x.BookName = $"{x.BookName}-{x.Author}";
            });
            cbxBookConfig.DataSource    = bookConfigs;
            cbxBookConfig.DisplayMember = nameof(Book.BookName);
            cbxBookConfig.ValueMember   = nameof(Book.Id);
            cbxBookConfig.SelectedIndex = 0;
        }
Esempio n. 6
0
        /// <summary>
        /// 添加一本书的配置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSaveBookRules_Click(object sender, EventArgs e)
        {
            var bookName      = cbxBookName.Text;
            var author        = txtAuthor.Text;
            var selectedRules = cbxSelectedRule.Text;
            var startUrl      = txtStartUrl.Text;

            if (string.IsNullOrWhiteSpace(bookName) || string.IsNullOrWhiteSpace(author) ||
                string.IsNullOrWhiteSpace(selectedRules) || string.IsNullOrWhiteSpace(startUrl))
            {
                Console.WriteLine("爬虫配置填写不完整,请输入完整的配置");
                MessageBox.Show("爬虫配置填写不完整,请输入完整的配置");
                return;
            }

            BooksUtils.AddBook(new Book
            {
                BookName        = bookName,
                Author          = author,
                CrawlerRuleName = selectedRules,
                StartUrl        = startUrl
            });
            Console.WriteLine("爬虫配置保存成功");
        }