Beispiel #1
0
        public static async Task ManageAdvSend()
        {
            try
            {
                var tokenSource = new CancellationTokenSource();
                var res         = await SettingBusiness.GetAllAsync();

                var   cls = res.Count == 0 ? new SettingBusiness() : res[0];
                short maxDailyCountDivar        = 1;
                short maxMountlyCountDivar      = 1;
                short maxAdvCountInIpInDayDivar = 1;


                short maxDailyCountSheypoor        = 1;
                short maxMountlyCountSheypoor      = 1;
                short maxAdvCountInIpInDaySheypoor = 1;

                short maxDailyCountNiazmandyHa        = 1;
                short maxMountlyCountNiazmandyHa      = 1;
                short maxAdvCountInIpInDayNiazmandyHa = 1;
                var   filePath     = Path.Combine(Application.StartupPath, "GateWay.txt");
                var   filelst      = ReadAllLines(filePath).ToList();
                var   GateWayCount = 0;

                while (!tokenSource.IsCancellationRequested)
                {
                    var isIpFull = true;
                    for (var i = (int)AdvertiseType.Divar; i <= (int)AdvertiseType.NiazmandyHa; i++)
                    {
                        var lst = new List <long>();
                        switch (i)
                        {
                        case (int)AdvertiseType.Divar:
                            maxDailyCountDivar        = (short)cls.DivarSetting.AdvCountInDay;
                            maxMountlyCountDivar      = (short)cls.DivarSetting.AdvCountInMonth;
                            maxAdvCountInIpInDayDivar = (short)cls.DivarSetting.CountAdvInIp;
                            break;

                        case (int)AdvertiseType.Sheypoor:
                            maxDailyCountSheypoor        = (short)cls.SheypoorSetting.AdvCountInDay;
                            maxMountlyCountSheypoor      = (short)cls.SheypoorSetting.AdvCountInMonth;
                            maxAdvCountInIpInDaySheypoor = (short)cls.SheypoorSetting.CountAdvInIp;
                            break;

                        case (int)AdvertiseType.NiazKade:
                            break;

                        case (int)AdvertiseType.NiazmandyHa:
                            maxDailyCountNiazmandyHa        = (short)cls.NiazmandyHaSetting.AdvCountInDay;
                            maxMountlyCountNiazmandyHa      = (short)cls.NiazmandyHaSetting.AdvCountInMonth;
                            maxAdvCountInIpInDayNiazmandyHa = (short)cls.NiazmandyHaSetting.CountAdvInIp;
                            break;
                        }

                        var number = await SimCardBusiness.GetNextSimCardNumberAsync(
                            (short)i, maxDailyCountDivar, maxDailyCountSheypoor, await GetLocalIpAddress(),
                            maxMountlyCountDivar, maxMountlyCountSheypoor, maxAdvCountInIpInDayDivar,
                            maxAdvCountInIpInDaySheypoor, maxDailyCountNiazmandyHa, maxMountlyCountNiazmandyHa,
                            maxAdvCountInIpInDayNiazmandyHa);

                        if (number != 0)
                        {
                            isIpFull = false;
                            lst.Add(number);
                            if (i == (int)AdvertiseType.Divar)
                            {
                                if (await PingHost("185.105.239.1"))
                                {
                                    var divar = await DivarAdv.GetInstance();

                                    await divar.StartRegisterAdv(lst, maxDailyCountDivar);
                                }
                            }
                            else if (i == (int)AdvertiseType.Sheypoor)
                            {
                                if (await PingHost("185.105.239.1"))
                                {
                                    var sheypoor = await SheypoorAdv.GetInstance();

                                    await sheypoor.StartRegisterAdv(lst, maxDailyCountSheypoor);
                                }
                            }
                            else if (i == (int)AdvertiseType.NiazKade)
                            {
                                isIpFull = false;
                                continue;
                            }
                            else if (i == (int)AdvertiseType.DivarChat)
                            {
                                isIpFull = false;
                                continue;
                            }
                            else if (i == (int)AdvertiseType.NiazmandyHa)
                            {
                                //if (await PingHost("185.105.239.1"))
                                //{
                                //    var niazmandyHa = await NiazmandyHaAdv.GetInstance();
                                //    await niazmandyHa.StartRegisterAdv(lst, maxDailyCountNiazmandyHa);
                                //}
                                isIpFull = false;
                                continue;
                            }
                        }
                        CloseAllChromeWindows();
                        if (!isIpFull)
                        {
                            continue;
                        }
                        GateWayCount++;
                        if (GateWayCount > filelst.Count)
                        {
                            numbers = new List <int>();
                            if (await FindGateWay() == IP_Store.IP_Mokhaberat.Value)
                            {
                                await ChangeIp();
                                await Wait(60);
                            }

                            while (await GetLocalIpAddress() == null)
                            {
                                await Wait(10);

                                lstMessage.Clear();
                                lstMessage.Add("مودم مخابرات ریست شد. لطفا منتظر بمانید");
                                ShowBalloon("درحال اتصال...", lstMessage);
                            }
                            await UpdateAdvStatus(1);

                            i            = -1;
                            GateWayCount = 0;
                            continue;
                        }

                        var gateway = await GetRandomGeteWay();

                        if (gateway == null)
                        {
                            continue;
                        }
                        await SetGateway(gateway);

                        lstMessage.Clear();
                        lstMessage.Add(" GateWay تعویض شد. لطفا منتظر بمانید");
                        ShowBalloon("درحال اتصال...", lstMessage);
                        while (await GetLocalIpAddress() == null)
                        {
                            await Wait(2);

                            lstMessage.Add(" GateWay تعویض شد. لطفا منتظر بمانید");
                            ShowBalloon("درحال اتصال...", lstMessage);
                        }

                        //GateWayCount = 0;
                        i = -1;
                    }
                }
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorLogInstance.StartLog(ex);
            }
        }
Beispiel #2
0
        public async Task StartRegisterAdv(List <long> numbers = null, int count = 0)
        {
            //if (_semaphoreSlim.CurrentCount == 0)
            //{
            //    DialogResult result;
            //    result = MessageBox.Show("برنامه در حال اجرای فرایندی دیگر می باشد و در صورت تائید فرایند قبلی متوقف خواهد شد." + "\r\nآیا فرایند قبلی متوقف شود؟", "هشدار", MessageBoxButtons.YesNo,
            //        MessageBoxIcon.Question);
            //    if (result == DialogResult.Yes)
            //        _tokenSource?.Cancel();
            //    else return;
            //}
            _tokenSource?.Cancel();
            await _semaphoreSlim.WaitAsync();

            _tokenSource = new CancellationTokenSource();

            var monitor = new PerfMonitor();
            var isLogin = false;
            await Task.Run(async() =>
            {
                try
                {
                    while (await PingHost("185.105.239.1") == false)
                    {
                        await Wait(5);
                        lstMessage.Clear();
                        lstMessage.Add("خطای اتصال به شبکه");
                        ShowBalloon("لطفا اتصال به شبکه را چک نمایید", lstMessage);
                    }

                    while (await PingHost("185.105.239.1"))
                    {
                        SimCardBusiness firstSimCardBusiness = null;
                        //اگر نامبر صفر نباشد یعنی کاربر خواسته روی شماره ای خاص آگهی بزند
                        //اگر صفر باشد روی تمام سیم کارتها داخل حلقه وایل، آگهی ثبت می شود
                        if (numbers != null && numbers.Count == 0)
                        {
                            if (!(_cls?.NiazSetting?.AdvCountInDay > 0))
                            {
                                return;
                            }

                            _driver = RefreshDriver(_driver);

                            //     MessageBox.Show(_driver.WindowHandles.Count.ToString());
                            while (!_tokenSource.IsCancellationRequested)
                            {
                                var currentIp = "";
                                while (_cls?.NiazSetting.CountAdvInIp <= await
                                       AdvertiseLogBusiness.GetAllAdvInDayFromIP(await GetLocalIpAddress(),
                                                                                 AdvertiseType.NiazKade))
                                {
                                    //ShowBalloon("پر شدن تعداد آگهی در " + await FindGateWay(),
                                    //    "سیستم در حال تعویض IP یا سایت می باشد");
                                    await SetGateway(await GetRandomGeteWay());
                                    currentIp = await GetLocalIpAddress();
                                    if (await FindGateWay() != IP_Store.IP_Mokhaberat.Value ||
                                        !(_cls?.NiazSetting.CountAdvInIp <= await
                                          AdvertiseLogBusiness.GetAllAdvInDayFromIP(await GetLocalIpAddress(),
                                                                                    AdvertiseType.NiazKade)))
                                    {
                                        continue;
                                    }
                                    if (await GoToNextSite(AdvertiseType.NiazKade, 0))
                                    {
                                        continue;
                                    }
                                    await ChangeIp();
                                    while (await GetLocalIpAddress() == null)
                                    {
                                        await Wait(10);
                                        //ShowBalloon("درحال اتصال...", "مودم مخابرات ریست شد. لطفا منتظر بمانید");
                                    }
                                    if (await GoToNextSite(AdvertiseType.NiazKade, 1))
                                    {
                                        continue;
                                    }
                                }
                                //var simCard =
                                //    await SimCardBusiness.GetNextSimCardNumberAsync((short)AdvertiseType.NiazKade, (short)_cls.NiazSetting.AdvCountInDay, await GetLocalIpAddress());
                                //if (simCard == 0) break;

                                //firstSimCardBusiness = await SimCardBusiness.GetAsync(simCard);
                                if (firstSimCardBusiness is null)
                                {
                                    break;
                                }
                                var lastUseNiaz = firstSimCardBusiness.NextUseNiazKade;

                                firstSimCardBusiness.NextUseNiazKade = DateTime.Now.AddMinutes(30);
                                await firstSimCardBusiness.SaveAsync();
                                //اگر توکن نداشت سیمکارت عوض بشه
                                //var tt = await AdvTokensBusiness.GetToken(simCard, AdvertiseType.NiazKade);
                                //var hasToken = tt?.Token ?? null;
                                //if (string.IsNullOrEmpty(hasToken)) continue;

                                var startDayOfCurrentMonthOfDateShToMiladi = Calendar.StartDayOfPersianMonth();
                                var startDayOfNextMonthOfDateShToMiladi    = Calendar.EndDayOfPersianMonth().AddDays(1);
                                //آمار آگهی های ثبت شده برای سیم کارت در ماه جاری
                                //var a1 = await AdvertiseLogBusiness.GetAllSpecialAsync(p =>
                                //    p.SimCardNumber == simCard && p.AdvType == AdvertiseType.NiazKade
                                //                               && (p.StatusCode == (short) StatusCode.Published
                                //                                   || p.StatusCode == (short) StatusCode.InPublishQueue)
                                //                               && p.DateM >= startDayOfCurrentMonthOfDateShToMiladi);
                                //var registeredAdvCountInMonth = a1.Count;
                                //if (registeredAdvCountInMonth >= _cls?.NiazSetting?.AdvCountInMonth)
                                //{
                                //    //تاریخ روز اول ماه شمسی بعد را تنظیم می کند چون تا سر ماه بعد دیگر نیازی به این سیم کارت نیست
                                //    firstSimCardBusiness.NextUseNiazKade = startDayOfNextMonthOfDateShToMiladi;
                                //    await firstSimCardBusiness.SaveAsync();
                                //    continue;
                                //}


                                ////آمار آگهی های ثبت شده امروز
                                //var currentDate = DateTime.Now.Date;
                                //var a2 = await AdvertiseLogBusiness.GetAllSpecialAsync(p =>
                                //    p.SimCardNumber == simCard && p.AdvType == AdvertiseType.NiazKade
                                //                               && (p.StatusCode == (short) StatusCode.Published
                                //                                   || p.StatusCode == (short) StatusCode.InPublishQueue
                                //                                   || p.StatusCode == (short) StatusCode.WaitForPayment)
                                //                               && p.DateM >= currentDate);
                                //var registeredAdvCountInDay = a2.Count;

                                //if (registeredAdvCountInDay >= _cls?.NiazSetting?.AdvCountInDay)
                                //{
                                //    //تاریخ فردا رو ست می کند چون تا فردا دیگه نیازی به این سیم کارت نیست
                                //    firstSimCardBusiness.NextUseNiazKade = DateTime.Today.AddDays(1);
                                //    await firstSimCardBusiness.SaveAsync();
                                //    continue;
                                //}

                                //if (await Login(simCard) == false)
                                //{
                                //    firstSimCardBusiness.NextUseNiazKade = lastUseNiaz;
                                //    await firstSimCardBusiness.SaveAsync();
                                //    continue;
                                //}

                                //اینجا به تعداد تنظیم شده در تنظیمات دیوار منهای تعداد ثبت شده قبلی، آگهی درج می کند
                                //for (var i = 0; i < _cls?.NiazSetting?.AdvCountInDay - registeredAdvCountInMonth; i++)
                                //{
                                //    var currentIp1 = "";
                                //    while (_cls?.NiazSetting.CountAdvInIp <= await
                                //               AdvertiseLogBusiness.GetAllAdvInDayFromIP(await GetLocalIpAddress(),
                                //                   AdvertiseType.NiazKade))
                                //    {
                                //        ShowBalloon("پر شدن تعداد آگهی در " + await FindGateWay(),
                                //            "سیستم در حال تعویض IP یا سایت می باشد");
                                //       await SetGateway(await GetRandomGeteWay());
                                //        currentIp1 = await GetLocalIpAddress();
                                //        var countAdvInIp1 = await
                                //            AdvertiseLogBusiness.GetAllAdvInDayFromIP(await GetLocalIpAddress(),
                                //                AdvertiseType.NiazKade);
                                //        if (!(_cls?.NiazSetting.CountAdvInIp <= countAdvInIp1)) continue;
                                //        if (await GoToNextSite(AdvertiseType.NiazKade,0)) continue;
                                //        await ChangeIp();
                                //        while (await GetLocalIpAddress() == null)
                                //        {
                                //            await Wait(10);
                                //            ShowBalloon("درحال اتصال...", "مودم مخابرات ریست شد. لطفا منتظر بمانید");
                                //        }
                                //        if (await GoToNextSite(AdvertiseType.NiazKade, 1)) continue;
                                //    }
                                //    var adv = await GetNextAdv(simCard);
                                //    if (adv == null) continue;
                                //    await RegisterAdv(adv);

                                //}
                            }
                        }
                        //اگر کاربر روی یک سیم کارت خاص می خواهد تعدادی آگهی درج کند
                        else
                        {
                            foreach (var number in numbers)
                            {
                                if (!await Login(number))
                                {
                                    continue;
                                }
                                firstSimCardBusiness = await SimCardBusiness.GetAsync(number);
                                if (firstSimCardBusiness is null)
                                {
                                    return;
                                }
                                var tt       = await AdvTokensBusiness.GetToken(number, AdvertiseType.NiazKade);
                                var hasToken = tt?.Token ?? null;
                                if (string.IsNullOrEmpty(hasToken))
                                {
                                    return;
                                }
                                firstSimCardBusiness.NextUseNiazKade = DateTime.Now.AddMinutes(30);
                                await firstSimCardBusiness.SaveAsync();
                                //اینجا به تعداد آگهی های درج شده قبلی کاری ندارد و مستیم به تعدادی که کاربر گفته آگهی درج می کند
                                for (var i = 0; i < count; i++)
                                {
                                    var currentIp = "";
                                    while (_cls?.NiazSetting.CountAdvInIp <= await
                                           AdvertiseLogBusiness.GetAllAdvInDayFromIP(await GetLocalIpAddress(),
                                                                                     AdvertiseType.NiazKade))
                                    {
                                        //ShowBalloon("پر شدن تعداد آگهی در " + await FindGateWay(),
                                        //    "سیستم در حال تعویض IP یا سایت می باشد");
                                        await SetGateway(await GetRandomGeteWay());
                                        currentIp = await GetLocalIpAddress();
                                        if (await FindGateWay() != IP_Store.IP_Mokhaberat.Value ||
                                            !(_cls?.NiazSetting.CountAdvInIp <= await
                                              AdvertiseLogBusiness.GetAllAdvInDayFromIP(await GetLocalIpAddress(),
                                                                                        AdvertiseType.NiazKade)))
                                        {
                                            continue;
                                        }
                                        await ChangeIp();
                                        while (await GetLocalIpAddress() == null)
                                        {
                                            await Wait(10);
                                            //ShowBalloon("درحال اتصال...", "مودم مخابرات ریست شد. لطفا منتظر بمانید");
                                        }
                                    }
                                    var adv = await GetNextAdv(number);
                                    if (adv == null)
                                    {
                                        continue;
                                    }
                                    await RegisterAdv(adv);
                                    //var countAdvInIp1 = await
                                    //    AdvertiseLogBusiness.GetAllAdvInDayFromIP(await GetLocalIpAddress(),
                                    //        AdvertiseType.NiazKade);
                                    //if (!(_cls?.NiazSetting.CountAdvInIp <= countAdvInIp1)) continue;
                                    //await GoToNextSite(AdvertiseType.NiazKade);
                                    //return;
                                }
                            }
                        }


                        _driver.Navigate().GoToUrl("http://www.niazkade.com/panel/myAds");

                        await Wait(5);

                        //ShowBalloon("لطفا اتصال به شبکه را چک نمایید", "خطای اتصال به شبکه");
                        continue;
                    }
                }
                catch (Exception ex)
                {
                    WebErrorLog.ErrorLogInstance.StartLog(ex);
                }
                finally
                {
                    monitor.Dispose();
                }
            });

            _semaphoreSlim.Release();
        }
Beispiel #3
0
        public async Task <bool> Login(long simCardNumber)
        {
            var monitor = new PerfMonitor();

            try
            {
                _driver = RefreshDriver(_driver);
                var js          = (IJavaScriptExecutor)_driver;
                var simBusiness = await AdvTokensBusiness.GetToken(simCardNumber, AdvertiseType.NiazKade);

                var token = simBusiness?.Token;

                //   در صورتیکه توکن قبلا ثبت شده باشد لاگین می کند
                if (!string.IsNullOrEmpty(token))
                {
                    _driver.Navigate().GoToUrl("http://www.niazkade.com/panel/myAds");


                    js.ExecuteScript($"localStorage.setItem('user','{token}');");
                    _driver.Navigate().Refresh();

                    var linksElements = _driver.FindElements(By.ClassName("nav-link"))
                                        .FirstOrDefault(q => q.Text == "خروج");
                    if (linksElements != null)
                    {
                        _driver.ExecuteJavaScript(@"alert('لاگین انجام شد');");
                        await Wait();

                        _driver.SwitchTo().Alert().Accept();
                        return(true);
                    }
                }


                //اگر قبلا توکن نداشته و یا توکن اشتباه باشد وارد صفحه دریافت کد تائید لاگین می شود
                _driver.Manage().Timeouts().PageLoad = new TimeSpan(0, 2, 0);

                _driver.Navigate().GoToUrl("http://www.niazkade.com/panel/myAds");
                if (_driver.FindElements(By.ClassName("form-control")).Count > 0)
                {
                    _driver.FindElement(By.ClassName("form-control")).SendKeys("0" + simCardNumber + "\n");
                }

                //انتظار برای لاگین شدن
                int repeat = 0;
                //حدود 120 ثانیه فرصت لاگین دارد
                while (repeat < 20)
                {
                    //تا زمانی که لاگین اوکی نشده باشد این حلقه تکرار می شود

                    var name = await SimCardBusiness.GetOwnerNameAsync(simCardNumber);

                    var message = $@"مالک: {name} \r\nشماره: {simCardNumber}  \r\nلطفا لاگین نمائید ";
                    _driver.ExecuteJavaScript($"alert('{message}');");
                    //Wait();

                    await Wait(3);

                    try
                    {
                        _driver.SwitchTo().Alert().Accept();
                        await Wait(3);

                        repeat++;
                    }
                    catch
                    {
                        await Wait(15);
                    }
                    var linksElements = _driver.FindElements(By.ClassName("nav-link")).FirstOrDefault(q => q.Text == "خروج");
                    if (linksElements == null)
                    {
                        continue;
                    }

                    token = js.ExecuteScript("return localStorage.getItem('user')").ToString();
                    if (simBusiness != null)
                    {
                        simBusiness.Token = token;
                    }
                    else
                    {
                        simBusiness = new AdvTokensBusiness
                        {
                            Guid     = Guid.NewGuid(),
                            Token    = token,
                            Modified = DateTime.Now,
                            Number   = simCardNumber,
                            Type     = AdvertiseType.NiazKade
                        };
                    }
                    await simBusiness?.SaveAsync();

                    _driver.ExecuteJavaScript(@"alert('لاگین انجام شد');");
                    await Wait();

                    _driver.SwitchTo().Alert().Accept();
                    return(true);
                }

                var linksElements1 =
                    _driver.FindElements(By.ClassName("nav-link")).FirstOrDefault(q => q.Text == "خروج") ??
                    null;
                if (linksElements1 == null)
                {
                    var msg = $@"فرصت لاگین کردن به اتمام رسید. لطفا دقایقی بعد مجددا امتحان نمایید";
                    _driver.ExecuteJavaScript($"alert('{msg}');");
                    _driver.SwitchTo().Alert().Accept();
                    await Wait(3);
                }

                _driver.Navigate().GoToUrl("http://www.niazkade.com");
                await Wait();

                if (simBusiness == null)
                {
                    return(false);
                }
                simBusiness.Token = null;
                await simBusiness.SaveAsync();

                return(false);
            }
            catch (WebException) { return(false); }
            catch (Exception ex)
            {
                if (ex.Source != "WebDriver")
                {
                    WebErrorLog.ErrorLogInstance.StartLog(ex);
                }
                return(false);
            }

            finally { monitor.Dispose(); }
        }
Beispiel #4
0
        private async Task RegisterAdv(AdvertiseLogBusiness adv)
        {
            var ret     = new ReturnedSaveFuncInfo();
            var monitor = new PerfMonitor();

            try
            {
                adv.AdvType = AdvertiseType.NiazKade;
                _driver     = RefreshDriver(_driver);
                _driver.Navigate().GoToUrl("http://www.niazkade.com/new");
                await Wait(4);



                //کلیک روی ساب کتگوری 1
                if (string.IsNullOrEmpty(adv.SubCategory1))
                {
                    adv.SubCategory1 = _cls?.NiazSetting?.Category1;
                }
                _driver.FindElements(By.ClassName("category-list")).FirstOrDefault(q => q.Text == adv.SubCategory1)?.Click();

                await Wait(2);



                //کلیک روی ساب کتگوری2
                if (string.IsNullOrEmpty(adv.SubCategory2))
                {
                    adv.SubCategory2 = _cls?.NiazSetting?.Category2;
                }
                _driver.FindElements(By.ClassName("category-list")).FirstOrDefault(q => q.Text == adv.SubCategory2)?.Click();
                await Wait();


                //درج عکسها

                _driver.FindElement(By.XPath("//input[@type='file']")).SendKeys(adv.ImagesPath);



                //درج عنوان آگهی
                _driver.FindElement(By.Id("title")).SendKeys("");
                _driver.FindElement(By.Id("title")).SendKeys(adv.Title);
                await Wait();


                //انتخاب شهر
                _driver.FindElements(By.ClassName("vs__search")).FirstOrDefault()?.SendKeys(adv.State + "\n");
                await Wait(2);

                _driver.FindElements(By.ClassName("vs__search")).LastOrDefault()?.SendKeys(adv.City + "\n");
                //await Wait();



                //درج محتوای آگهی
                _driver.FindElement(By.Id("description"))
                .SendKeys("");
                _driver.FindElement(By.Id("description"))
                .SendKeys(adv.Content.Replace('(', '<').Replace(')', '>'));
                //await Wait();



                //درج قیمت
                _driver.FindElement(By.Id("price"))?.SendKeys("");
                _driver.FindElement(By.Id("price"))?.SendKeys(adv.Price.ToString());

                await Wait();

                _driver.FindElement(By.Id("phone_number"))?.SendKeys("");
                _driver.FindElement(By.Id("phone_number"))?.SendKeys("0" + adv.SimCardNumber.ToString());

                await Wait(2);

                //کلیک روی دکمه ثبت آگهی


                _driver.FindElements(By.TagName("button")).FirstOrDefault(q => q.Text == "ثبت اگهی")
                ?.Click();

                //اگر آگهی با موفقیت ثبت شود لینک مدیریت آگهی ذخیره می شود
                await Wait(2);


                adv.URL        = _driver.Url;
                adv.UpdateDesc = @"در صف انتشار";
                adv.AdvStatus  = @"در صف انتشار";
                adv.StatusCode = (short)StatusCode.InPublishQueue;
                adv.AdvType    = AdvertiseType.NiazKade;
                adv.IP         = await GetLocalIpAddress();

                await adv.SaveAsync();

                var sim = await SimCardBusiness.GetAsync(adv.SimCardNumber);

                sim.DivarModified = DateTime.Now;
                await sim.SaveAsync();

                //بعد از درج آگهی در دیتابیس لاگ می شود
            }
            catch (Exception ex)
            {
                // MessageBox.Show(@"در هنگام ثبت آگهی زیر خطا رخ داد\r\n" + adv.Adv + @"\r\n" + ex.Message);
                WebErrorLog.ErrorLogInstance.StartLog(ex);
                ret.AddReturnedValue(ex);
            }
            finally { monitor.Dispose(); }
        }
        public async Task <bool> Login(List <long> simCardNumber)
        {
            var monitor = new PerfMonitor();

            try
            {
                foreach (var item in simCardNumber)
                {
                    Utility.CloseAllChromeWindows();
                    await GetInstance();

                    _driver = Utility.RefreshDriver(_driver);
                    var simBusiness = await AdvTokensBusiness.GetToken(item, AdvertiseType.NiazmandyHa);

                    var simcard = await SimCardBusiness.GetAsync(item);

                    var token = simBusiness?.Token;
                    _driver.Navigate().GoToUrl("https://niazmandyha.ir/panel/ads");
                    //   در صورتیکه توکن قبلا ثبت شده باشد لاگین می کند
                    if (!string.IsNullOrEmpty(token))
                    {
                        var cooc = _driver.Manage().Cookies.AllCookies;
                        if (cooc.Count == 3)
                        {
                            _driver.Manage().Cookies.DeleteCookieNamed(CookieStore.NiazmandyHaCookieName.Value);
                        }

                        _driver.Navigate().Refresh();
                        var a = new OpenQA.Selenium.Cookie(CookieStore.NiazmandyHaCookieName.Value, token);
                        _driver.Manage().Cookies.AddCookie(a);
                        _driver.Navigate().Refresh();

                        _driver.Navigate().GoToUrl("https://niazmandyha.ir/panel/ads");

                        var linksElements = _driver.FindElements(By.ClassName("black"))
                                            .FirstOrDefault(q => q.Text == "خروج");
                        if (linksElements != null)
                        {
                            _driver.ExecuteJavaScript(@"alert('لاگین انجام شد');");
                            await Utility.Wait();

                            _driver.SwitchTo().Alert().Accept();
                            continue;
                        }

                        _driver.FindElement(By.Id("username")).SendKeys(simcard.UserName);
                        _driver.FindElement(By.Id("password")).SendKeys("0" + item + '\n');
                        var linksElement = _driver.FindElements(By.ClassName("black"))
                                           .FirstOrDefault(q => q.Text == "خروج");
                        if (linksElement != null)
                        {
                            token             = _driver.Manage().Cookies.AllCookies.LastOrDefault()?.Value ?? null;
                            simBusiness.Token = token;
                            await simBusiness?.SaveAsync();

                            _driver.ExecuteJavaScript(@"alert('لاگین انجام شد');");
                            await Utility.Wait();

                            _driver.SwitchTo().Alert().Accept();
                            continue;
                        }
                    }


                    //اگر قبلا توکن نداشته و یا توکن اشتباه باشد وارد صفحه ثبت نام می شود
                    _driver.Manage().Timeouts().PageLoad = new TimeSpan(0, 2, 0);

                    _driver.FindElements(By.TagName("span"))
                    .FirstOrDefault(q => q.Text == "عضویت در نیازمندی ها")?.Click();
                    _driver.FindElement(By.Id("name")).SendKeys(simcard.OwnerName);
                    _driver.FindElement(By.Id("tel")).SendKeys("0" + item);
                    _driver.FindElement(By.Id("email")).SendKeys(simcard.UserName + "@Yahoo.com");
                    _driver.FindElement(By.Id("username")).SendKeys(simcard.UserName);
                    _driver.FindElement(By.Id("password")).SendKeys("0" + item);
                    _driver.FindElements(By.TagName("button")).FirstOrDefault(q => q.Text == "ثبت نام")?.Click();
                    await Utility.Wait();

                    var counter = 0;
                    while (_driver.Url == "https://niazmandyha.ir/login" || _driver.Url == "https://niazmandyha.ir/register")
                    {
                        //تا زمانی که لاگین اوکی نشده باشد این حلقه تکرار می شود
                        counter++;
                        if (counter >= 60)
                        {
                            break;
                        }
                        var name = await SimCardBusiness.GetOwnerNameAsync(item);

                        var message = $@"مالک: {name} \r\nشماره: {item}  \r\nلطفا لاگین نمائید ";
                        _driver.ExecuteJavaScript($"alert('{message}');");

                        await Utility.Wait(3);

                        try
                        {
                            _driver.SwitchTo().Alert().Accept();
                            await Utility.Wait(3);
                        }
                        catch
                        {
                            await Utility.Wait(15);
                        }


                        var linksElements = _driver.FindElements(By.ClassName("black"))
                                            .FirstOrDefault(q => q.Text == "خروج");
                        if (linksElements == null)
                        {
                            continue;
                        }

                        token = _driver.Manage().Cookies.AllCookies.LastOrDefault()?.Value ?? null;
                        if (string.IsNullOrEmpty(token))
                        {
                            continue;
                        }
                        if (simBusiness != null)
                        {
                            simBusiness.Token = token;
                        }
                        else
                        {
                            simBusiness = new AdvTokensBusiness
                            {
                                Guid     = Guid.NewGuid(),
                                Token    = token,
                                Modified = DateTime.Now,
                                Number   = item,
                                Type     = AdvertiseType.NiazmandyHa
                            };
                        }

                        await simBusiness?.SaveAsync();

                        _driver.ExecuteJavaScript(@"alert('لاگین انجام شد');");
                        await Utility.Wait();

                        _driver.SwitchTo().Alert().Accept();
                        Utility.CloseAllChromeWindows();
                        continue;
                    }


                    if (_driver.Url != "https://niazmandyha.ir/panel")
                    {
                        return(false);
                    }
                    token = _driver.Manage().Cookies.AllCookies.LastOrDefault()?.Value ?? null;
                    if (simBusiness != null)
                    {
                        simBusiness.Token = token;
                    }
                    else
                    {
                        simBusiness = new AdvTokensBusiness
                        {
                            Guid     = Guid.NewGuid(),
                            Token    = token,
                            Modified = DateTime.Now,
                            Number   = item,
                            Type     = AdvertiseType.NiazmandyHa
                        };
                    }
                    await simBusiness?.SaveAsync();

                    _driver.ExecuteJavaScript(@"alert('لاگین انجام شد');");
                    await Utility.Wait();

                    _driver.SwitchTo().Alert().Accept();
                    if (counter < 60)
                    {
                        return(true);
                    }

                    var linksElements1 = _driver?.FindElements(By.ClassName("black"))
                                         .FirstOrDefault(q => q.Text == "خروج") ??
                                         null;
                    if (linksElements1 == null)
                    {
                        var msg = $@"فرصت لاگین کردن به اتمام رسید. لطفا دقایقی بعد مجددا امتحان نمایید";
                        _driver.ExecuteJavaScript($"alert('{msg}');");
                        _driver.SwitchTo().Alert().Accept();
                        await Utility.Wait(3);
                    }

                    _driver.Navigate().GoToUrl("https://niazmandyha.ir");
                    await Utility.Wait();

                    simBusiness.Token = null;
                    await simBusiness.SaveAsync();
                }


                return(false);
            }
            catch (WebException) { return(false); }
            catch (Exception ex)
            {
                if (ex.Source != "WebDriver")
                {
                    WebErrorLog.ErrorLogInstance.StartLog(ex);
                }
                return(false);
            }

            finally { monitor.Dispose(); }
        }
        private async Task RegisterAdv(AdvertiseLogBusiness adv)
        {
            var ret     = new ReturnedSaveFuncInfo();
            var monitor = new PerfMonitor();

            try
            {
                adv.AdvType = AdvertiseType.NiazmandyHa;
                _driver     = Utility.RefreshDriver(_driver);
                _driver.Navigate().GoToUrl("https://niazmandyha.ir/newAd");
                await Utility.Wait();

                //درج عکسها
                _driver.FindElement(By.XPath("//input[@type='file']")).SendKeys(adv.ImagesPath);

                //درج عنوان آگهی
                _driver.FindElement(By.Name("title")).SendKeys("");
                _driver.FindElement(By.Name("title")).SendKeys(adv.Title);


                //کلیک کردن روی کتگوری اصلی
                _driver.FindElements(By.Name("category")).FirstOrDefault()?.Click();
                await Utility.Wait();

                //کلیک روی ساب کتگوری 1
                if (string.IsNullOrEmpty(adv.SubCategory1))
                {
                    adv.SubCategory1 = cls?.NiazmandyHaSetting?.Category1;
                }
                _driver.FindElements(By.TagName("option")).FirstOrDefault(q => q.Text == adv.SubCategory1)?.Click();

                await Utility.Wait(1);



                //درج قیمت

                _driver.FindElement(By.Name("cost"))?.SendKeys("");
                _driver.FindElement(By.Name("cost"))?.SendKeys(adv.Price.ToString());

                await Utility.Wait();


                //درج محتوای آگهی
                var thread = new Thread(() => Clipboard.SetText(adv.Content.Replace('(', '<').Replace(')', '>')));
                thread.SetApartmentState(ApartmentState.STA);
                thread.Start();

                var t = _driver.FindElement(By.TagName("iframe"));
                t.Click();
                await Utility.Wait(1);

                t.SendKeys(OpenQA.Selenium.Keys.Control + "v");
                var thread1 = new Thread(Clipboard.Clear);
                thread1.SetApartmentState(ApartmentState.STA);
                thread1.Start();


                //انتخاب شهر
                await Utility.Wait();

                _driver.FindElement(By.Name("state")).Click();
                await Utility.Wait();

                _driver.FindElements(By.TagName("option"))?.FirstOrDefault(q => q.Text == adv.State)?.Click();
                await Utility.Wait(1);

                _driver.FindElement(By.Name("city")).Click();
                await Utility.Wait();

                var cc = _driver.FindElements(By.TagName("option")).FirstOrDefault(q => q.Text == adv.City) ??
                         _driver.FindElements(By.TagName("option")).LastOrDefault();
                await Utility.Wait();

                cc?.Click();


                //کلیک روی دکمه ثبت آگهی
                await Utility.Wait(2);

                _driver.FindElements(By.TagName("button")).FirstOrDefault(q => q.Text == "ثبت آگهی")
                ?.Click();



                //اگر آگهی با موفقیت ثبت شود لینک مدیریت آگهی ذخیره می شود
                await Utility.Wait();

                await Utility.Wait(2);

                adv.URL = await MakeUrl(_driver.Url);

                adv.UpdateDesc = @"در صف انتشار";
                adv.AdvStatus  = @"در صف انتشار";
                adv.StatusCode = (short)StatusCode.InPublishQueue;
                adv.AdvType    = AdvertiseType.NiazmandyHa;
                adv.IP         = await Utility.GetLocalIpAddress();

                adv.SubCategory2 = "-";
                await adv.SaveAsync();

                var sim = await SimCardBusiness.GetAsync(adv.SimCardNumber);

                sim.NiazmandyHaModified = DateTime.Now;
                await sim.SaveAsync();

                //بعد از درج آگهی در دیتابیس لاگ می شود
            }
            catch (Exception ex)
            {
                // MessageBox.Show(@"در هنگام ثبت آگهی زیر خطا رخ داد\r\n" + adv.Adv + @"\r\n" + ex.Message);
                WebErrorLog.ErrorLogInstance.StartLog(ex);
                ret.AddReturnedValue(ex);
            }
            finally { monitor.Dispose(); }
        }