public AllWorkCatcher(IHelper <Proxy> proxyHelper, IHelper <Work> workHelper, IHelper <Author> authorHelper) : base(proxyHelper)
        {
            this.workHelper   = workHelper;
            this.authorHelper = authorHelper;

            isUseProxy = true;

            nextWorkPage = new AllWorkPage(string.Format("https://bcy.net/coser/allwork?&p={0}", 1));
        }
        protected override void WebResponseHandle(string response, ICatchItem catchItem)
        {
            try
            {
                string requestDomain = string.Empty;
                requestDomain = string.Format("{0}://{1}", catchItem.Uri.Scheme, catchItem.Uri.Host);

                string html = response;
                var    doc  = new HtmlDocument();

                doc.LoadHtml(html);

                IPage page = RuleConfig.PageRule.GetRule(PageType.AllWork);

                var nodes = doc.DocumentNode.SelectNodes("//li[@class='pager__item js-nologinLink']");
                var nextPageButtonNode = nodes.ElementAt(nodes.Count - 2);

                var nextPageNode = nextPageButtonNode?.SelectSingleNode("./a");

                string href = nextPageNode?.Attributes["href"].Value;
                if (string.IsNullOrEmpty(href))
                {
                    nextWorkPage = null;
                }
                else
                {
                    nextWorkPage = new AllWorkPage(StringUtil.FillWithDomain(href, requestDomain));
                }

                var galleryNodes = page.GetNodes(doc.DocumentNode, "Gallery");
                if (galleryNodes != null)
                {
                    logger.InfoFormat("获取作品列表: 个数:{0}", galleryNodes.Count);

                    galleryNodes.ToList().ForEach(item =>
                    {
                        Work work = new Work();

                        string _address = page.GetSingleNodeValue(item, "Gallery.Address");
                        work.Address    = StringUtil.FillWithDomain(_address, requestDomain)?.AbsoluteUri;

                        //work.Originality = page.GetSingleNodeValue(item, "Gallery.Originality");

                        //work.Role = page.GetSingleNodeValue(item, "Gallery.Role");

                        work.Name = page.GetSingleNodeValue(item, "Gallery.Name");

                        Author author = new Author();

                        string authorAddress = page.GetSingleNodeValue(item, "Gallery.Author.Address");
                        author.Address       = StringUtil.FillWithDomain(authorAddress, requestDomain)?.AbsoluteUri;

                        author.Name = work.Name;

                        authorHelper.Add(author);
                        workHelper.Add(work);

                        logger.InfoFormat("获得作品: [Address:{0}], [Originality:{1}], [Role:{2}], [Name:{3}]", work.Address, work.Originality, work.Role, work.Name);
                    });
                }
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("WorkCatcher WebResponseHandle:{0}", ex);
            }
        }