Exemple #1
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Редактирует буллетин. </summary>
        ///
        /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
        ///-------------------------------------------------------------------------------------------------

        public override void EditBulletin(Bulletin bulletin)
        {
            _DCT.Execute(data =>
            {
                WebWorker.Execute(() =>
                {
                    WebWorker.NavigatePage(Path.Combine(bulletin.Url, "edit"));

                    var fieldSetter = FieldSetterContainerList.Get(Uid);
                    fieldSetter.LoadFieldsFromGroup(bulletin.Signature);

                    foreach (var pair in bulletin.Fields)
                    {
                        fieldSetter.SetField(pair.Key, pair.Value);
                    }

                    if (bulletin.State == "Активные")
                    {
                        //Продолжить с пакетом «Обычная продажа»
                        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);
                    }
                    else
                    {
                        var button = WebWorker.WebDocument.GetElementsByTagName("button").Cast <HtmlElement>()
                                     .FirstOrDefault(q => q.GetAttribute("type") == "submit" && q.InnerText == "Продолжить");

                        if (button != null)
                        {
                            button.InvokeMember("click");
                        }

                        Thread.Sleep(1000);
                    }
                });

                WebWorker.DownloadPage(Path.Combine(bulletin.Url, "edit", "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");
                    }

                    Thread.Sleep(1000);
                });
            });
        }
Exemple #2
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Gets the bulletins. </summary>
        ///
        /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
        ///-------------------------------------------------------------------------------------------------

        public override void GetBulletins()
        {
            _DCT.Execute(data =>
            {
                Exit();
                Auth();

                var bulletins = new List <Bulletin>();
                var tabStates = new List <TabState>();
                WebWorker.Execute(() =>
                {
                    WebWorker.NavigatePage(ProfileUrl);

                    var tabs = WebWorker.WebDocument.GetElementsByTagName("li").Cast <HtmlElement>()
                               .Where(q => q.GetAttribute("className").Contains("tabs-item")).ToArray();

                    tabStates.Add(new TabState
                    {
                        Title = "Активные",
                        Href  = ProfileUrl,
                    });

                    foreach (var tab in tabs)
                    {
                        if (!tab.CanHaveChildren)
                        {
                            continue;
                        }

                        foreach (HtmlElement ch in tab.Children)
                        {
                            if (ch.TagName.ToLower() == "a")
                            {
                                var tabUrl   = ch.GetAttribute("href");
                                var tabState = ch.InnerText;

                                tabStates.Add(new TabState
                                {
                                    Title = tabState,
                                    Href  = tabUrl,
                                });
                            }
                        }
                    }
                });
                WebWorker.Execute(() =>
                {
                    foreach (var tabState in tabStates)
                    {
                        WebWorker.NavigatePage(tabState.Href);

                        var nextPages = new List <string>();
                        nextPages.Add(tabState.Href);

                        var hasNextPage = true;
                        do
                        {
                            var result = GetBulletinPages(tabState.Title);
                            bulletins.AddRange(result);

                            var nextPage = WebWorker.WebDocument.GetElementsByTagName("a").Cast <HtmlElement>()
                                           .FirstOrDefault(q => q.GetAttribute("className").Contains("js-pagination-next"));
                            if (nextPage == null)
                            {
                                hasNextPage = false;
                            }
                            else
                            {
                                var nextPageHref = nextPage.GetAttribute("href");
                                nextPages.Add(nextPageHref);
                                hasNextPage = true;
                                nextPage.InvokeMember("click");
                                Thread.Sleep(1000);
                            }
                        } while (hasNextPage);
                    }

                    bulletins = bulletins;
                });

                WebWorker.Execute(() =>
                {
                    var groupContainer = GroupContainerList.Get(null);
                    foreach (var bulletin in bulletins)
                    {
                        var url = Path.Combine(bulletin.Url, "edit");
                        WebWorker.NavigatePage(url);
                        Thread.Sleep(1500);

                        var groupElement = WebWorker.WebDocument.GetElementsByTagName("div").Cast <HtmlElement>()
                                           .FirstOrDefault(q => q.GetAttribute("className").Contains("form-category-path"));

                        if (groupElement == null)
                        {
                            continue;
                        }

                        var categories     = groupElement.InnerText.Split('/').Select(q => q.Trim()).ToArray();
                        bulletin.Signature = new GroupSignature(categories);

                        var group = groupContainer.Get(bulletin.Signature.GetHash());

                        if (group == null)
                        {
                            continue;
                        }

                        var fieldSetter = FieldSetterContainerList.Get(Uid);
                        fieldSetter.LoadFieldsFromGroup(bulletin.Signature);

                        var dictionary = new Dictionary <string, string>();
                        foreach (var field in group.Fields)
                        {
                            var value = fieldSetter.GetField(field.Key);
                            dictionary.Add(field.Key, value);
                        }
                        bulletin.Fields = dictionary;
                    }
                });

                WebWorker.Execute(() =>
                {
                    var groups = bulletins.Where(q => q.Fields != null && q.Fields.Count > 0).GroupBy(q => q.Signature.ToString());
                    foreach (var groupedBulletins in groups)
                    {
                        var xls = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), $"edit_bulletins[{groupedBulletins.Key}].xlsx"));
                        if (xls.Exists)
                        {
                            xls.Delete();
                        }
                        var firstBulletin = groupedBulletins.FirstOrDefault();
                        using (var package = new ExcelPackage(xls))
                        {
                            var worksheet = package.Workbook.Worksheets.Add("Мои объявления");
                            var keys      = firstBulletin.Fields.Keys;
                            var count     = 0;
                            foreach (var k in keys)
                            {
                                var cell             = worksheet.Cells[1, count + 1];
                                cell.Style.Font.Size = 14;
                                cell.Value           = k;
                                cell.AutoFitColumns();
                                count++;
                            }
                            var row = 2;
                            foreach (var bulletin in groupedBulletins)
                            {
                                var column = 0;
                                foreach (var k in keys)
                                {
                                    var cell   = worksheet.Cells[row, column + 1];
                                    var field  = bulletin.Fields[k];
                                    cell.Value = field;
                                    column++;
                                }

                                worksheet.Column(column + 1).Hidden = true;
                                var urlCell   = worksheet.Cells[row, column + 1];
                                urlCell.Value = bulletin.Url;

                                worksheet.Column(column + 2).Hidden = true;
                                var stateCell   = worksheet.Cells[row, column + 2];
                                stateCell.Value = bulletin.State;
                                row++;
                            }

                            package.Save();
                        }
                    }
                });
            });
        }
Exemple #3
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Добавляем буллетин на борду. </summary>
        ///
        /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
        ///
        /// <param name="group">        Выбранная группа. </param>
        /// <param name="dictionary">   Словарь полей. </param>
        ///-------------------------------------------------------------------------------------------------

        public override void AddBulletin(Data.Group group, Dictionary <string, string> dictionary)
        {
            _DCT.Execute(data =>
            {
                WebWorker.DownloadPage("https://www.avito.ru/additem", (doc) =>
                {
                    if (WebWorker.WebDocument != null)
                    {
                        //1
                        //Категория - Услуги
                        if (!string.IsNullOrEmpty(group.Category1))
                        {
                            var categoryRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                                .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == group.Category1);
                            if (categoryRadio == null)
                            {
                                return;
                            }
                            categoryRadio.InvokeMember("click");

                            Thread.Sleep(1000);
                        }

                        //2
                        //Услуги - Предложения услуг
                        if (!string.IsNullOrEmpty(group.Category2))
                        {
                            var serviceRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                               .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == group.Category2);
                            if (serviceRadio == null)
                            {
                                return;
                            }
                            serviceRadio.InvokeMember("click");

                            Thread.Sleep(1000);
                        }



                        //3
                        //Вид услуги - IT, интернет, телеком
                        if (!string.IsNullOrEmpty(group.Category3))
                        {
                            var serviceTypeRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                                   .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == group.Category3);
                            if (serviceTypeRadio == null)
                            {
                                return;
                            }
                            serviceTypeRadio.InvokeMember("click");

                            Thread.Sleep(1000);
                        }



                        //4
                        //Тип услуги - Cоздание и продвижение сайтов
                        if (!string.IsNullOrEmpty(group.Category4))
                        {
                            var serviceTypeRadio2 = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                                    .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == group.Category4);
                            if (serviceTypeRadio2 == null)
                            {
                                return;
                            }
                            serviceTypeRadio2.InvokeMember("click");

                            Thread.Sleep(1000);
                        }



                        var fieldSetter = FieldSetterContainerList.Get(Uid);
                        fieldSetter.LoadFieldsFromGroup(new GroupSignature(group.Category1));

                        var select = WebWorker.WebDocument.GetElementById("flt_param_2843");
                        if (select != null)
                        {
                            select.SetAttribute("value", "20122");
                        }

                        foreach (var pair in dictionary)
                        {
                            fieldSetter.SetField(pair.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");
                    }
                });
            }, _DCTGroup.ContainerAvito);
        }