/// <summary> /// 下载图集 /// </summary> /// <param name="type">gallery或者scraps</param> private void download(string type) { AddItemToTextBox(type + "下载开始"); GetUserInput(); // 循环下载第pageNum页 while (true) { if (isStop) { throw new Exception("正在结束下载"); } // 存储当前页面地址 string nowUrl = string.Format("http://www.furaffinity.net/{0}/{1}/{2}", type, userName, startPageNum); // 下载当前页 string html = GetHtml(nowUrl); // 检查页面是否下载成功 if (html == null || html == "") { throw new Exception("请检查网络"); } // 检查此用户是否存在 if (!Analyze.HasUser(html)) { throw new Exception("未查询到该作者,请检查作者名称"); } // 检查此页是否需要登录才能访问 if (!Analyze.NeedLogin(html)) { throw new Exception("需要登陆后才能下载此作者的作品"); } //--------开始详情页下载循环------------ // 获得所有详情页 List <String> pages = Analyze.GetPages(html); // 检查此页是否还有图片,没有的话就结束并等待所有任务完成 AddItemToTextBox(String.Format("第{0}页共{1}张图片", startPageNum, pages.Count)); if (pages.Count == 0) { return; } for (int i = startPicNum - 1; i < pages.Count; ++i) { // 停止时不再添加新的任务 if (isStop) { throw new Exception("正在结束下载"); } downloadPicture(pages[i], type); } startPicNum = 1; startPageNum++; } }
/// <summary> /// 下载图集 /// </summary> /// <param name="type">gallery或者scraps</param> private void download(string type) { AddItemToTextBox(type + "下载开始"); GetUserInput(); // 循环下载第pageNum页 while (true) { try { if (isStop) { throw new Exception("正在结束下载"); } // 存储当前页面地址 string nowUrl = string.Format("https://www.furaffinity.net/{0}/{1}/{2}", type, userName, startPageNum); // 下载当前页 string html = GetHtml(nowUrl); // 检查页面是否下载成功 if (html == null || html == "") { throw new NetworkException("请检查网络"); } // 检查此用户是否存在 if (!Analyze.HasUser(html)) { throw new NoSuchArtistException("未查询到该作者,请检查作者名称"); } // 检查此页是否需要登录才能访问 if (!Analyze.NeedLogin(html)) { throw new NeedLoginException("需要登陆后才能下载此作者的作品"); } //--------开始详情页下载循环------------ // 获得所有详情页 List <String> pages = Analyze.GetPages(html); // 检查此页是否还有图片,没有的话就结束并等待所有任务完成 AddItemToTextBox(String.Format("第{0}页共{1}张图片", startPageNum, pages.Count)); if (pages.Count == 0) { return; } for (int i = startPicNum - 1; i < pages.Count; ++i) { // 停止时不再添加新的任务 if (isStop) { throw new InterruptException("正在结束下载"); } // 在到达最大下载量时停止 if (maxDownloadNum != 0 && currentDownloadTaskNum >= maxDownloadNum) { AddItemToTextBox("已到达最大任务量,正在等待下载完成"); return; } currentDownloadTaskNum++; downloadPicture(pages[i], type); } startPicNum = 1; startPageNum++; } catch (NetworkException) { if (checkBoxRetry.Checked) { AddItemToTextBox("网络不稳定,将在一秒后重试"); Thread.Sleep(1000); } else { throw; } } } }