void PrepareBulletin(BulletinPackage bulletin) { DCT.Execute(d => { WebDriver.UpdateActions(); if (bulletin.State == (int)BulletinState.Edited) { WebDriver.NavigatePage(Path.Combine(bulletin.Url, "edit")); Thread.Sleep(2000); } else { WebDriver.NavigatePage("https://www.avito.ru/additem"); Thread.Sleep(2000); ChooseCategories(bulletin.Signature); } if (!SetValueFields(bulletin)) { PrepareBulletin(bulletin); } }, continueExceptionMethod: (d, e) => { PrepareBulletin(bulletin); }); }
public static BulletinPackage ToCache(BulletinInstance obj) { BulletinPackage result = null; BCT.Execute(d => { var groupSignature = GroupHelper.GetGroupSignature(obj.Id); var access = AccessHelper.GetFreeAccess(obj.Id); var valueFields = ValueFieldHelper.GetValueFields(obj.Id); var accessFields = AccessFieldHelper.GetAccessFields(obj.Id); var state = obj.State; result = new BulletinPackage { BulletinId = obj.BulletinId, BulletinInstanceId = obj.Id, Url = obj.Url, Signature = groupSignature, Access = access, ValueFields = valueFields, AccessFields = accessFields, State = state, Title = obj.Url, }; }); return(result); }
public BulletinView(BulletinPackage package) { BulletinId = package.BulletinId; if (package.ValueFields != null) { if (package.ValueFields.ContainsKey("Название объявления")) { Title = package.ValueFields["Название объявления"]; } if (package.ValueFields.ContainsKey("Описание объявления")) { Description = package.ValueFields["Описание объявления"]; } if (package.ValueFields.ContainsKey("Цена")) { Price = package.ValueFields["Цена"]; } if (int.TryParse(package.Views, out int viewResult)) { Views = viewResult; } State = TranslateState(EnumHelper.GetValue <BulletinState>(package.State)); Url = package.Url; } }
///------------------------------------------------------------------------------------------------- /// <summary> Gel children recursively. </summary> /// /// <remarks> SV Milovanov, 30.01.2018. </remarks> /// /// <param name="element"> The element. </param> /// <param name="bulletin"> The bulletin. </param> ///------------------------------------------------------------------------------------------------- void GelChildrenRecursively(HtmlElement element, BulletinPackage bulletin) { DCT.Execute(data => { if (!element.CanHaveChildren && element.Children.Count == 0) return; foreach (HtmlElement ch in element.Children) { if (ch.TagName.ToLower() == "span" && ch.GetAttribute("className").Contains("profile-item-views-count")) { if (!string.IsNullOrEmpty(bulletin.Views)) continue; var regex = new Regex(@"(?<count>\d+)"); var match = regex.Match(ch.InnerText); if (match.Success) { bulletin.Views = match.Groups["count"].Value; } } if (ch.TagName.ToLower() == "a" && ch.GetAttribute("name").Contains("item_")) { bulletin.Url = ch.GetAttribute("href"); bulletin.Title = ch.InnerText; } GelChildrenRecursively(ch, bulletin); } }); }
public static void _PrepareInstance(BulletinPackage obj, Action <BulletinPackage> action = null) { DCT.ExecuteAsync(d2 => { using (var client = new ServiceClient()) client.CreateBulletin(obj, action); }); }
public static void _CloneBulletin(BulletinPackage obj, Action <BulletinPackage> action = null) { DCT.ExecuteAsync(d2 => { using (var client = new ServiceClient()) client.CloneBulletins(obj, action); }); }
void CloneBulletinCallback(BulletinPackage bulletin) { MessageBox.Show("Объявление отправлено на републикацию"); var b = Bulletins.FirstOrDefault(q => q.BulletinId == bulletin.BulletinId); b.CanRepublicate = false; }
void GetUrl(BulletinPackage bulletin) { DCT.Execute(d => { var a = WebDriver.Find(By.XPath("//*[@class='content-text']/p/a")); var href = a.GetAttribute("href"); bulletin.Url = href; }); }
public void CreateBulletin(BulletinPackage obj, Action <BulletinPackage> action = null) { DCT.Execute(d => { var act = action == null ? (a) => { } : action; SendQueryObject("Create", (a) => act(a), obj: obj); //CreateBulletins(new[] { obj }, (a) => act(a.FirstOrDefault())); }); }
private void AddBulletinCallback(BulletinPackage obj) { if (obj == null) { MessageBox.Show("Ошибка соединения с сервером"); return; } MessageBox.Show("Объявление было добавлено"); SelectedIndexTab = 2; RaisePropertyChanged(() => SelectedIndexTab); GetBulletins(); }
public static BulletinInstance ToEntity(BulletinPackage obj, BulletinInstance entity) { BulletinInstance result = null; BCT.Execute(d => { entity.State = obj.State; entity.Url = obj.Url; result = entity; }); return(result); }
void GetUrl(BulletinPackage bulletin) { DCT.Execute(d => { if (!string.IsNullOrEmpty(bulletin.Url)) { UiHelper.UpdateActionState("URL успешно считан"); } else { UiHelper.UpdateActionState("URL is NULL"); } }); }
void SetValueFields(BulletinPackage bulletin, FieldValueContainerBase fieldContainer) { DCT.Execute(d => { foreach (var pair in bulletin.ValueFields) { if (string.IsNullOrEmpty(pair.Value)) { continue; } var template = bulletin.AccessFields.FirstOrDefault(q => q.Key == pair.Key); fieldContainer.SetFieldValue(bulletin.AccessFields, template.Key, pair.Value); } }); }
void CloneBulletin(BulletinView bulletin) { var package = new BulletinPackage { BulletinId = bulletin.BulletinId }; using (var client = new ServiceClient()) { var r = client.Ping(); Console.WriteLine($"Ping = {r}"); ServiceClient._CloneBulletin(package, CloneBulletinCallback); } }
///------------------------------------------------------------------------------------------------- /// <summary> Gets bulletin pages. </summary> /// /// <remarks> SV Milovanov, 30.01.2018. </remarks> /// /// <param name="state"> The state. </param> /// /// <returns> The bulletin pages. </returns> ///------------------------------------------------------------------------------------------------- List<BulletinPackage> GetBulletinPages(string state) { var result = new List<BulletinPackage>(); DCT.Execute(data => { var s = WebWorker.WebDocument.Body.OuterHtml; var titleDivs = WebWorker.WebDocument.GetElementsByTagName("div").Cast<HtmlElement>() .Where(q => q.GetAttribute("className").Contains("profile-item-description")); foreach (var d in titleDivs) { var bulletin = new BulletinPackage { State = state }; GelChildrenRecursively(d, bulletin); result.Add(bulletin); } }); return result; }
public static TaskCache_old ToCache(Data.Task obj) { TaskCache_old result = null; BCT.Execute(d => { var bulletinPackage = new BulletinPackage(); var accessPackage = new AccessCache(); if (obj.TargetType == typeof(BulletinInstance).ToString()) { var dbInstance = d.BulletinDb.BulletinInstances.FirstOrDefault(q => q.Id == obj.InstanceId); var dbAccess = d.BulletinDb.Accesses.FirstOrDefault(q => q.Id == obj.AccessId); var groupSignature = GroupHelper.GetGroupSignature2(dbInstance.BulletinId); var valueFields = ValueFieldHelper.GetValueFields2(dbInstance.BulletinId); var accessFields = AccessFieldHelper.GetAccessFields2(dbInstance.BulletinId); bulletinPackage.Signature = groupSignature; bulletinPackage.ValueFields = valueFields; bulletinPackage.AccessFields = accessFields; bulletinPackage.Access = Access.ToCache(dbAccess); bulletinPackage.State = dbInstance.State; bulletinPackage.Url = dbInstance.Url; } else if (obj.TargetType == typeof(Access).ToString()) { } result = new TaskCache_old { BulletinId = obj.InstanceId, AccessId = obj.AccessId, TargetType = obj.TargetType, TargetTime = obj.TargetDate, Command = obj.Command, BulletinPackage = bulletinPackage, AccessPackage = accessPackage, }; }); return(result); }
void Publicate(BulletinPackage bulletin) { DCT.Execute(d => { if (bulletin.State == (int)BulletinState.WaitPublication) { UiHelper.UpdateActionState("Переход на страницу - additem/confirm"); } else if (bulletin.State == (int)BulletinState.Edited) { UiHelper.UpdateActionState($"Переход на страницу - {Path.Combine(bulletin.Url, "edit", "confirm")}"); } Thread.Sleep(1000); UiHelper.UpdateActionState("Снятие премиум-галочек"); Thread.Sleep(1000); UiHelper.UpdateActionState("Подтверждение публикации"); Thread.Sleep(1000); }); }
public static BulletinPackage ToPackageCache(Bulletin obj) { var result = default(BulletinPackage); BCT.Execute(d => { var package = new BulletinPackage(); var valueFields = new Dictionary <string, string>(); valueFields.Add("Название объявления", obj.Title); valueFields.Add("Описание объявления", obj.Description); valueFields.Add("Цена", obj.Price); valueFields.Add("Вид объявления ", "Продаю свое"); if (string.IsNullOrEmpty(obj.Images)) { valueFields.Add("Фотографии", obj.Images); } package.ValueFields = valueFields; package.Title = obj.Title; result = package; }); return(result); }
void Publicate(BulletinPackage bulletin) { DCT.Execute(d => { if (bulletin.State == (int)BulletinState.WaitPublication || bulletin.State == 0) { WebDriver.NavigatePage("https://www.avito.ru/additem/confirm"); } else if (bulletin.State == (int)BulletinState.Edited) { WebDriver.NavigatePage(Path.Combine(bulletin.Url, "edit", "confirm")); } //Снимаем галочки WebDriver.JsClick(By.Id("service-premium")); WebDriver.JsClick(By.Id("service-vip")); WebDriver.JsClick(By.Id("service-highlight")); //Подтверждаем var button = WebDriver.FindMany(By.TagName("button")).FirstOrDefault(q => q.Text == "Продолжить"); WebDriver.JsClick(button); }); }
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 static Bulletin ToEntity(BulletinPackage obj, Bulletin entity) { var result = default(Bulletin); BCT.Execute(d => { var hash = obj.Signature.GetHash(); var dbGroup = d.BulletinDb.Groups.FirstOrDefault(q => q.Hash == hash); var bulletinTitle = obj.ValueFields["Название объявления"]; var bulletinDesc = obj.ValueFields["Описание объявления"]; var bulletinPrice = obj.ValueFields["Цена"]; var bulletinImages = obj.ValueFields.ContainsKey("Фотографии") ? obj.ValueFields["Фотографии"] : null; entity.UserId = d.UserId; entity.GroupId = dbGroup.Id; entity.Title = bulletinTitle; entity.Description = bulletinDesc; entity.Price = bulletinPrice; entity.Images = bulletinImages; result = entity; }); return(result); }
List <BulletinPackage> GetBulletinPages(string state) { var result = new List <BulletinPackage>(); DCT.Execute(data => { var titles = WebDriver.FindMany(By.XPath("//*[@class='profile-item-description']")); foreach (var t in titles) { var a = t.FindElement(By.XPath("div/h3/a")); var url = a.GetAttribute("href"); var name = a.Text; var bulletin = new BulletinPackage { Url = url, Title = name, State = (int)GetStateFromTabString(state) }; result.Add(bulletin); } }); return(result); }
public void PrepareInstance(BulletinPackage obj, Action <BulletinPackage> action = null) { var act = action == null ? (a) => { } : action; CreateBulletins(new[] { obj }, (a) => act(a.FirstOrDefault())); }
public void CloneBulletins(BulletinPackage obj, Action <BulletinPackage> action = null) { var act = action == null ? (a) => { } : action; CloneBulletins(new[] { obj }, (a) => act(a.FirstOrDefault())); }
bool SetValueFields(BulletinPackage bulletin) { var result = false; DCT.Execute(d => { var accessFiels = bulletin.AccessFields; var valueFields = bulletin.ValueFields; var bulletinTypeField = accessFiels["Вид объявления "]; var bulletinTypeOption = bulletinTypeField.Options.FirstOrDefault(q => q.Text == "Продаю свое"); var bulletinTypeCode = bulletinTypeOption.Value; var bulletinTitleCode = accessFiels["Название объявления"].HtmlId; var bulletinDescCode = accessFiels["Описание объявления"].HtmlId; var bulletinPriceCode = accessFiels["Цена"].HtmlId; var bulletinImageCode = accessFiels["Фотографии"].HtmlId; var bulletinTitleText = valueFields["Название объявления"]; var bulletinDescText = valueFields["Описание объявления"]; var bulletinPriceText = valueFields["Цена"]; var bulletinImageText = valueFields.ContainsKey("Фотографии") ? valueFields["Фотографии"] : string.Empty; WebDriver.JsClick(By.CssSelector($"input[value='{bulletinTypeCode}']")); if (bulletin.State == (int)BulletinState.Edited) { WebDriver.DoAction(By.CssSelector($"input[id='{bulletinTitleCode}']"), e => e.Clear()); WebDriver.DoAction(By.CssSelector($"textarea[id='{bulletinDescCode}']"), e => e.Clear()); WebDriver.DoAction(By.CssSelector($"input[id='{bulletinPriceCode}']"), e => e.Clear()); } WebDriver.DoAction(By.CssSelector($"input[id='{bulletinTitleCode}']"), e => e.SendKeys(bulletinTitleText)); WebDriver.DoAction(By.CssSelector($"textarea[id='{bulletinDescCode}']"), e => e.SendKeys(bulletinDescText)); WebDriver.DoAction(By.CssSelector($"input[id='{bulletinPriceCode}']"), e => e.SendKeys(bulletinPriceText)); var oldImages = WebDriver.FindMany(By.ClassName("form-uploader-item__delete")).ToArray(); if (oldImages.Length > 0) { foreach (var image in oldImages) { WebDriver.JsClick(image); } } if (!string.IsNullOrEmpty(bulletinImageText)) { var images = bulletinImageText.Split(new[] { "\r\n" }, StringSplitOptions.None); foreach (var image in images) { if (!WebDriver.Wait(WebDriver.NoAttribute(By.CssSelector($"input[name='{bulletinImageCode}']"), "disabled"), 20)) { return; } WebDriver.JsClick(By.CssSelector($"input[name='{bulletinImageCode}']"), (e) => { Thread.Sleep(1000); SendKeys.SendWait(image); }); SendKeys.SendWait("{ENTER}"); Thread.Sleep(10000); if (!WebDriver.Wait(WebDriver.ElementExists(By.CssSelector($"input[name='{bulletinImageCode}']")), 20)) { return; } } var addedImagesCount = WebDriver.FindMany(By.ClassName("form-uploader-item")).Where(q => q.GetAttribute("data-state") == "active").Count(); if (addedImagesCount != images.Length) { return; } } result = true; }); if (!result) { SendKeys.SendWait("{ESC}"); } return(result); }
public override void CloneBulletins(IEnumerable <AggregateBulletinPackage> packages) { UiHelper.UpdateWorkState("Клонирование буллетинов"); DCT.Execute(d => { var createdBulletins = new List <BulletinPackage>(); { var fieldValueContainer = FieldValueContainerList.Get(Uid); var accessContainer = AccessContainerList.Get(Uid); foreach (var package in packages) { var name = package.Bulletin.ValueFields["Название объявления"]; UiHelper.UpdateObjectState($"Bulletin {name}, state = {package.Bulletin.State}"); UiHelper.UpdateActionState("Попытка авторизоваться"); var accesses = package.Accesses.ToArray(); foreach (var access in accesses) { if (accessContainer.TryAuth(access)) { UiHelper.UpdateActionState("Ожидание прогрузки страницы"); Thread.Sleep(2000); UiHelper.UpdateActionState("Переход на страницу - additem"); Thread.Sleep(1000); UiHelper.UpdateActionState("Выбор категорий"); ChooseCategories(package.Bulletin.Signature); UiHelper.UpdateActionState("Установка значений"); Thread.Sleep(1000); SetValueFields(package.Bulletin, fieldValueContainer); ContinueAddOrEdit(BulletinState.WaitPublication); Thread.Sleep(1000); Publicate(package.Bulletin); // Thread.Sleep(20000); GetUrl(package.Bulletin); var newBulletin = new BulletinPackage { Access = access, BulletinId = package.Bulletin.BulletinId, Url = package.Bulletin.Url, Title = package.Bulletin.Title, State = package.Bulletin.State, Signature = package.Bulletin.Signature, ValueFields = package.Bulletin.ValueFields }; createdBulletins.Add(newBulletin); } } } } { UiHelper.UpdateActionState("Проверка Url и установка состояний"); Thread.Sleep(1000); foreach (var p in packages) { var name = p.Bulletin.ValueFields["Название объявления"]; UiHelper.UpdateObjectState($"Bulletin {name}, state = {p.Bulletin.State}"); } UiHelper.UpdateActionState("Отправка коллбека"); Thread.Sleep(1000); } }); }