void ChooseCategories(GroupSignature signature) { DCT.Execute(d => { if (!string.IsNullOrEmpty(signature.Category1)) { Thread.Sleep(1000); } //2 if (!string.IsNullOrEmpty(signature.Category2)) { Thread.Sleep(1000); } //3 if (!string.IsNullOrEmpty(signature.Category3)) { Thread.Sleep(1000); } //4 if (!string.IsNullOrEmpty(signature.Category4)) { Thread.Sleep(1000); } //5 if (!string.IsNullOrEmpty(signature.Category5)) { Thread.Sleep(1000); } }); }
///------------------------------------------------------------------------------------------------- /// <summary> Создает сигнатуру группы из хэша </summary> /// /// <remarks> SV Milovanov, 12.02.2018. </remarks> /// /// <param name="hash"> The hash. </param> /// /// <returns> The group signature. </returns> ///------------------------------------------------------------------------------------------------- public static GroupSignature GetGroupSignature(string hash) { GroupSignature result = null; BCT.Execute(data => { var group = data.BulletinDb.Groups.FirstOrDefault(q => q.Hash == hash); if (group != null) { var chosenCategories = new List <string>(); var groupedCategories = data.BulletinDb.GroupedCategories.Where(q => q.GroupId == group.Id).Select(q => q.CategoryId).ToArray(); var categories = data.BulletinDb.CategoryTemplates.Where(q => groupedCategories.Contains(q.Id)).ToArray(); var topCategory = categories.FirstOrDefault(q => q.ParentId == Guid.Empty); var nothandledCategories = categories.Where(q => q.Id != topCategory.Id).ToList(); var parentId = topCategory.Id; chosenCategories.Add(topCategory.Name); while (nothandledCategories.Count > 0) { for (var i = 0; i < nothandledCategories.Count; i++) { if (nothandledCategories[i].ParentId == parentId) { parentId = nothandledCategories[i].Id; chosenCategories.Add(nothandledCategories[i].Name); nothandledCategories.RemoveAt(i); break; } } } result = new GroupSignature(chosenCategories.ToArray()); } }); return(result); }
///------------------------------------------------------------------------------------------------- /// <summary> Generates the XLS from group. </summary> /// /// <remarks> SV Milovanov, 30.01.2018. </remarks> /// /// <param name="signature"> The signature. </param> /// /// <returns> The XLS from group. </returns> ///------------------------------------------------------------------------------------------------- public override string GenerateXlsFromGroup(GroupSignature signature) { _DCT.Execute(data => { var groupContainer = GroupContainerList.Get(Uid); var group = groupContainer.Get(signature.GetHash()); var fields = group.Fields; var names = fields.Select(q => q.Key).ToArray(); var xls = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), $"bulletins[{group.ToString()}].xlsx")); if (xls.Exists) { xls.Delete(); } using (var package = new ExcelPackage(xls)) { var worksheet = package.Workbook.Worksheets.Add("Мои объявления"); for (var i = 0; i < names.Length; i++) { var cell = worksheet.Cells[1, i + 1]; cell.Style.Font.Size = 14; cell.Value = names[i]; cell.AutoFitColumns(); } package.Save(); } }); return(null); }
///------------------------------------------------------------------------------------------------- /// <summary> Редактирует буллетины из xls. </summary> /// /// <remarks> SV Milovanov, 05.02.2018. </remarks> ///------------------------------------------------------------------------------------------------- public override void EditBulletinsFromXls() { DCT.Execute(data => { var group = new GroupSignature("Хобби и отдых", "Охота и рыбалка"); var xls = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), $"edit_bulletins[{group}].xlsx")); using (var package = new ExcelPackage(xls)) { var worksheet = package.Workbook.Worksheets.FirstOrDefault(); var endOfColumns = false; var columnCount = 0; while (!endOfColumns) { if (!string.IsNullOrEmpty(worksheet.Cells[1, columnCount + 2].Value as string)) { columnCount++; } else { endOfColumns = true; } } var endOfBulletins = false; var bulletinCount = 0; while (!endOfBulletins) { if (!string.IsNullOrEmpty(worksheet.Cells[bulletinCount + 2, 1].Value as string)) { bulletinCount++; } else { endOfBulletins = true; } } Exit(); Auth(); for (var i = 0; i < bulletinCount; i++) { var dictionary = new Dictionary <string, string>(); for (var j = 0; j < columnCount; j++) { var header = worksheet.Cells[1, j + 2]; var cell = worksheet.Cells[i + 2, j + 2]; var key = header.Value as string; var v = cell.Value != null ? cell.Value.ToString() : string.Empty; dictionary.Add(key, v); } var guidCell = worksheet.Cells[i + 2, 1]; var guid = guidCell.Value as string; EditBulletin(Guid.Parse(guid), dictionary); } } }); }
///------------------------------------------------------------------------------------------------- /// <summary> Loads fields from group. </summary> /// /// <remarks> SV Milovanov, 30.01.2018. </remarks> /// /// <param name="signature"> The signature. </param> ///------------------------------------------------------------------------------------------------- public override void LoadFieldsFromGroup(GroupSignature signature) { DCT.Execute(data => { var groupContainer = GroupContainerList.Get(Uid); var group = groupContainer.GetGroupPackage(signature.GetHash()); Fields = group.Fields; }); }
///------------------------------------------------------------------------------------------------- /// <summary> Gets XLS group. </summary> /// /// <remarks> SV Milovanov, 06.02.2018. </remarks> /// /// <param name="boardName"> Name of the board. </param> ///------------------------------------------------------------------------------------------------- public static void GetXlsGroup(string boardName) { DCT.Execute(data => { var board = data.Db1.Boards.FirstOrDefault(q => q.Name == boardName); var boardContainer = BoardContainerList.Get(board.Id); var signature = new GroupSignature("Хобби и отдых", "Спорт и отдых", "Другое"); // boardContainer.GetXlsGroup(signature); }); }
///------------------------------------------------------------------------------------------------- /// <summary> Генерация excel-файла для выбранной доски и сигнатуры группы. </summary> /// /// <remarks> SV Milovanov, 30.01.2018. </remarks> /// /// <param name="boardId"> . </param> /// /// <returns> An array of byte. </returns> ///------------------------------------------------------------------------------------------------- public static byte[] GenerateXls(string boardId) { _DCT.Execute(data => { var boardContainer = BoardContainerList.Get(boardId); var group = new GroupSignature("Транспорт", "Автомобили", "С пробегом"); var s = boardContainer.GenerateXlsFromGroup(group); }); return(null); }
void ChooseCategories(GroupSignature signature) { DCT.Execute(d => { foreach (var category in signature.GetCategories()) { if (!string.IsNullOrEmpty(category)) { WebDriver.JsClick(By.CssSelector($"input[title='{category}']")); Thread.Sleep(1000); } } }); }
public static GroupSignature GetGroupSignature(Guid instanceId) { GroupSignature result = null; BCT.Execute(d => { var dbInstance = d.BulletinDb.BulletinInstances.FirstOrDefault(q => q.Id == instanceId); var groupId = dbInstance.GroupId; var dbGroup = d.BulletinDb.Groups.FirstOrDefault(q => q.Id == groupId); var groupHash = dbGroup.Hash; result = GetGroupSignature(groupHash); }); return(result); }
///------------------------------------------------------------------------------------------------- /// <summary> Генерирует пустую xls для группы. </summary> /// /// <remarks> SV Milovanov, 06.02.2018. </remarks> ///------------------------------------------------------------------------------------------------- public override void GetXlsGroup(GroupSignature signature) { DCT.Execute(d => { var groupContainer = GroupContainerList.Get(Uid); var groupPackage = groupContainer.GetGroupPackage(signature.GetHash()); var xls = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), $"new_bulletins[{groupPackage}].xlsx")); if (xls.Exists) { xls.Delete(); } using (var package = new ExcelPackage(xls)) { var worksheet = package.Workbook.Worksheets.Add("Мои объявления"); var pairs = groupPackage.Fields; var count = 0; foreach (var pair in pairs) { var cell = worksheet.Cells[1, count + 2]; cell.Style.Font.Size = 14; cell.Value = pair.Key; cell.AutoFitColumns(); var options = pair.Value.Options; if (options != null && options.Length > 0) { var optCells = worksheet.Cells[2, count + 2, 100, count + 2]; worksheet.DataValidations.Clear(); var validation = worksheet.DataValidations.AddListValidation(optCells.Address); validation.ShowErrorMessage = true; validation.ErrorStyle = ExcelDataValidationWarningStyle.warning; validation.ErrorTitle = "An invalid value was entered"; validation.Error = "Select a value from the list"; for (var i = 0; i < options.Length; i++) { validation.Formula.Values.Add(options[i].Text); } } count++; } package.Save(); } }); }
///------------------------------------------------------------------------------------------------- /// <summary> Создает сигнатуру группы из инстанции буллетина. </summary> /// /// <remarks> SV Milovanov, 12.02.2018. </remarks> /// /// <param name="instanceId"> Identifier for the instance. </param> /// /// <returns> The group signature. </returns> ///------------------------------------------------------------------------------------------------- public static GroupSignature GetGroupSignature2(Guid bulletinId) { GroupSignature result = null; BCT.Execute(d => { var dbBulletin = d.BulletinDb.Bulletins.FirstOrDefault(q => q.Id == bulletinId); var groupId = dbBulletin.GroupId; var dbGroup = d.BulletinDb.Groups.FirstOrDefault(q => q.Id == groupId); if (dbGroup != null) { var groupHash = dbGroup.Hash; result = GetGroupSignature(groupHash); } }); return(result); }
void AddBulletin(string cardName, string cardDescription, string cardPrice, string cardImageLinks) { DCT.Execute(d => { if (string.IsNullOrEmpty(cardName) || string.IsNullOrEmpty(cardDescription) || string.IsNullOrEmpty(cardPrice)) { MessageBox.Show("Пожалуйста, заполните все поля для добавления объявления"); return; } var access = new AccessCache { Login = Settings.Default.BoardLogin, Password = Settings.Default.BoardPassword, }; var signature = new GroupSignature(CardCategory1, CardCategory2, CardCategory3); var fields = new Dictionary <string, string> { { "Вид объявления", "Продаю свое" }, { "Название объявления", cardName }, { "Описание объявления", cardDescription }, { "Цена", cardPrice }, }; if (!string.IsNullOrEmpty(cardImageLinks)) { fields.Add(@"Фотографии", cardImageLinks); } var package = new BulletinPackage { Signature = signature, ValueFields = fields, Access = access, }; ServiceClient._CreateBulletin(package, AddBulletinCallback); }); }
public abstract void LoadFieldsFromGroup(GroupSignature signature);
public abstract string GenerateXlsFromGroup(GroupSignature signature);
///------------------------------------------------------------------------------------------------- /// <summary> Генерирует пустую xls для группы </summary> /// /// <remarks> SV Milovanov, 06.02.2018. </remarks> ///------------------------------------------------------------------------------------------------- public abstract void GetXlsGroup(GroupSignature signature);
///------------------------------------------------------------------------------------------------- /// <summary> Добавление буллетина </summary> /// /// <remarks> SV Milovanov, 05.02.2018. </remarks> /// /// <param name="signature"> Сигнатура группы </param> /// <param name="fields"> Словарь полей </param> ///------------------------------------------------------------------------------------------------- public void AddBulletin(GroupSignature signature, Dictionary <string, string> fields) { DCT.Execute(data => { WebWorker.DownloadPage("https://www.avito.ru/additem", (doc) => { //1 if (!string.IsNullOrEmpty(signature.Category1)) { var categoryRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>() .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category1); if (categoryRadio == null) { return; } categoryRadio.InvokeMember("click"); Thread.Sleep(1000); } //2 if (!string.IsNullOrEmpty(signature.Category2)) { var serviceRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>() .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category2); if (serviceRadio == null) { return; } serviceRadio.InvokeMember("click"); Thread.Sleep(1000); } //3 if (!string.IsNullOrEmpty(signature.Category3)) { var serviceTypeRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>() .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category3); if (serviceTypeRadio == null) { return; } serviceTypeRadio.InvokeMember("click"); Thread.Sleep(1000); } //4 if (!string.IsNullOrEmpty(signature.Category4)) { var serviceTypeRadio2 = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>() .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category4); if (serviceTypeRadio2 == null) { return; } serviceTypeRadio2.InvokeMember("click"); Thread.Sleep(1000); } //5 if (!string.IsNullOrEmpty(signature.Category5)) { var serviceTypeRadio3 = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>() .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category5); if (serviceTypeRadio3 == null) { return; } serviceTypeRadio3.InvokeMember("click"); Thread.Sleep(1000); } var fieldSetter = FieldContainerList.Get(Uid); fieldSetter.LoadFieldsFromGroup(signature); foreach (var pair in fields) { var template = fieldSetter.Fields.FirstOrDefault(q => q.Key == pair.Key); fieldSetter.SetFieldValue(template.Key, pair.Value); } //Продолжить с пакетом «Обычная продажа» var radioButton = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>() .FirstOrDefault(q => q.GetAttribute("id") == "pack1"); if (radioButton != null) { radioButton.InvokeMember("click"); } var buttons = WebWorker.WebDocument.GetElementsByTagName("button").Cast <HtmlElement>(); var pack = "Продолжить с пакетом «Обычная продажа»"; var button = buttons.FirstOrDefault(btn => btn.InnerText == pack); if (button != null) { button.InvokeMember("click"); } Thread.Sleep(1000); }); WebWorker.DownloadPage("https://www.avito.ru/additem/confirm", (doc) => { ////Снимаем галочки var servicePremium = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>() .FirstOrDefault(q => q.GetAttribute("id") == "service-premium"); if (servicePremium != null) { servicePremium.InvokeMember("click"); } var serviceVip = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>() .FirstOrDefault(q => q.GetAttribute("id") == "service-vip"); if (serviceVip != null) { serviceVip.InvokeMember("click"); } var serviceHighlight = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>() .FirstOrDefault(q => q.GetAttribute("id") == "service-highlight"); if (serviceHighlight != null) { serviceHighlight.InvokeMember("click"); } ////Подтверждаем var text = "Продолжить"; var buttonContinue = WebWorker.WebDocument.GetElementsByTagName("button").Cast <HtmlElement>().FirstOrDefault(btn => btn.InnerText == text); if (buttonContinue != null) { buttonContinue.InvokeMember("click"); } }); }); }
///------------------------------------------------------------------------------------------------- /// <summary> Edit from XLS. </summary> /// /// <remarks> SV Milovanov, 30.01.2018. </remarks> ///------------------------------------------------------------------------------------------------- public override void EditFromXls() { _DCT.Execute(data => { var signature = new GroupSignature("Хобби и отдых", "Спорт и отдых", "Другое"); //var signature = new GroupSignature("Личные вещи", "Товары для детей и игрушки", "Игрушки"); var xls = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), $"edit_bulletins[{signature.ToString()}].xlsx")); using (var package = new ExcelPackage(xls)) { var worksheet = package.Workbook.Worksheets.FirstOrDefault(); var endOfColumns = false; var columnCount = 0; while (!endOfColumns) { if (!string.IsNullOrEmpty(worksheet.Cells[1, columnCount + 1].Value as string)) { columnCount++; } else { endOfColumns = true; } } var endOfBulletins = false; var bulletinCount = 0; while (!endOfBulletins) { if (!string.IsNullOrEmpty(worksheet.Cells[bulletinCount + 2, 1].Value as string)) { bulletinCount++; } else { endOfBulletins = true; } } Exit(); Auth(); for (var i = 0; i < bulletinCount; i++) { var dictionary = new Dictionary <string, string>(); for (var j = 0; j < columnCount; j++) { var header = worksheet.Cells[1, j + 1]; var cell = worksheet.Cells[i + 2, j + 1]; var key = header.Value as string; var v = cell.Value != null ? cell.Value.ToString() : string.Empty; dictionary.Add(key, v); } var urlCell = worksheet.Cells[i + 2, columnCount + 1]; var url = urlCell.Value as string; var stateCell = worksheet.Cells[i + 2, columnCount + 2]; var state = stateCell.Value as string; var bulletin = new Bulletin { Fields = dictionary, Signature = signature, State = state, Url = url }; EditBulletin(bulletin); } } }); }