예제 #1
0
        static void Main(string[] args)
        {
            IWebDriver driver = new PhantomJSDriver();

            var url = "http://www.urbanspoon.com/r/1/1291/restaurant/Internacional-District/Seattle-Deli-Seattle";

            driver.Navigate().GoToUrl(url);


            var name   = driver.FindElements(By.CssSelector("span6>h1")).First().Text;
            var phone  = driver.FindElements(By.CssSelector(".phone.tel")).First().Text;
            var rating = driver.FindElements(By.CssSelector(".avarage.digits.rating")).First().Text.Split('\r')[0];
            var votes  = driver.FindElements(By.CssSelector(".total")).First().Text.Split(' ')[0];

            var sw        = new StreamWriter(@"output.csv");
            var csvWriter = new CsvHelper.CsvWriter(sw);

            csvWriter.WriteField(name);
            csvWriter.WriteField(phone);
            csvWriter.WriteField(rating);
            csvWriter.WriteField(votes);

            csvWriter.NextRecord();

            csvWriter.WriteField(name + " Hello! ");
            csvWriter.WriteField(phone);
            csvWriter.WriteField(rating);
            csvWriter.WriteField(votes);

            csvWriter.NextRecord();

            sw.Flush();
        }
예제 #2
0
        void crawl(string number)
        {
            var driverService = PhantomJSDriverService.CreateDefaultService(Environment.CurrentDirectory);


            driverService.HideCommandPromptWindow = true;

            IWebDriver driver = new PhantomJSDriver(driverService);

            driver.Navigate().GoToUrl("https://www.truecaller.com/");

            try
            {
                //       ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile(@"E:\Haider\Haider\Beautiful Soup\img1.jpg", ScreenshotImageFormat.Jpeg);
                var set = driver.FindElement(By.ClassName("searchbar__query"));
                set.SendKeys("+" + number);
                var    button = driver.FindElement(By.ClassName("searchbar__submit"));
                string js     = "arguments[0].click();";

                ((IJavaScriptExecutor)driver).ExecuteScript(js, button);

                Thread.Sleep(10);


                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);

                string name          = "";
                string other_details = "";
                Loboloba.Text = "";
                foreach (var element in driver.FindElements(By.CssSelector("div.profile-name")))
                {
                    Loboloba.Text += name = element.Text + Environment.NewLine;
                }
                foreach (var element in driver.FindElements(By.CssSelector("div.profile-details-text")))
                {
                    Loboloba.Text += other_details = element.Text + Environment.NewLine;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

            finally
            {
                driver.Close();
                driver.Quit();
            }
        }
예제 #3
0
        private void GetChapterComicPage()
        {
            var service = PhantomJSDriverService.CreateDefaultService();

            service.DiskCache               = true;
            service.IgnoreSslErrors         = true;
            service.HideCommandPromptWindow = true;
            service.LoadImages              = false;
            service.ProxyType               = "none";
            service.LocalToRemoteUrlAccess  = true;
            PhantomJSDriver driver = new PhantomJSDriver(service, new PhantomJSOptions(), TimeSpan.FromSeconds(120));

            driver.Navigate().GoToUrl(Url);

            var element = driver.FindElementById("page_select");

            foreach (var pages in driver.FindElements(By.XPath("//*[@id=\"page_select\"]/option")))
            {
                var page = new ComicPage();
                page.PageImgUrl = "https:" + pages.GetAttribute("value");
                page.PageNo     = pages.Text.GetNumber();
                _comicPageList.Add(page);
            }
            driver.Close();
            driver.Dispose();
        }
        public void MyTest(string chromePath = null)
        {
            var path    = chromePath ?? System.Environment.CurrentDirectory;
            var options = new PhantomJSOptions();

            using (var webDriver = new PhantomJSDriver(path, options)
            {
                Url = "https://stackoverflow.com/users/login"
            })
            {
                Wait(webDriver, "Log In - Stack Overflow");
                Assert.AreEqual("Log In - Stack Overflow", webDriver.Title);

                var loginPageObject = new LoginPageObject();
                PageFactory.InitElements(webDriver, loginPageObject);

                var username = ConfigurationManager.AppSettings["Username"];
                var password = ConfigurationManager.AppSettings["Password"];

                loginPageObject.Login(username, password);

                Wait(webDriver, "Stack Overflow - Where Developers Learn, Share, & Build Careers");

                Assert.AreEqual("Stack Overflow - Where Developers Learn, Share, & Build Careers", webDriver.Title);

                var questionList = webDriver.FindElements(By.CssSelector(".question-summary.narrow.tagged-interesting"));

                Assert.IsTrue(questionList.Count > 1);
            }
        }
예제 #5
0
        static void Main(string[] args)
        {
            var             urls   = new List <string>();
            PhantomJSDriver driver = new PhantomJSDriver();

            driver.Navigate().GoToUrl(link);
            for (int i = 1; i < 9; i++)
            {
                var          pages    = driver.FindElements(By.ClassName("pages"));
                HtmlDocument document = new HtmlDocument();
                document.LoadHtml(driver.PageSource);
                var cars = document.DocumentNode.SelectNodes(".//div[@class='vehicle-title clearfix']");
                foreach (var car in cars)
                {
                    var carDetail = car.SelectSingleNode(".//a");
                    var url       = carDetail.GetAttributeValue("href", "");
                    if (!urls.Contains(url))
                    {
                        urls.Add(url);
                    }
                }
                if (i == 8)
                {
                    break;
                }
                pages.ElementAt(i).Click();
                Thread.Sleep(1000);
            }

            Console.ReadKey();
        }
 public static List <string> GetSpiderResults(this PhantomJSDriver driver, string query)
 {
     try
     {
         var querySplitArr    = query.Split('@');
         var queryStr         = querySplitArr[0];
         var queryAttribute   = querySplitArr[1];
         var finedElements    = driver.FindElements(By.CssSelector(queryStr));
         var spiderResultList = new List <SpiderQueryResult>();
         var spiderResult     = new List <string>();
         foreach (var elementItem in finedElements)
         {
             if (queryAttribute == "text")
             {
                 spiderResult.Add(elementItem.Text);
             }
             else if (queryAttribute == "html")
             {
                 spiderResult.Add(elementItem.GetAttribute("innerHTML"));
             }
             else
             {
                 spiderResult.Add(elementItem.GetAttribute(queryAttribute));
             }
         }
         return(spiderResult);
     }
     catch (Exception exc)
     {
         Console.WriteLine(exc.Message);
     }
     return(default(List <string>));
 }
예제 #7
0
        public void scrapCinemaName(string googleURL)
        {
            IWebDriver driver = new PhantomJSDriver();
            var        url    = googleURL;

            driver.Navigate().GoToUrl(url);

            for (int i = 0; i < 5; i++)
            {
                //add current page cinemas
                var cinemasName = scrapOnePageCinema(driver);

                //add all
                allCinemas.AddRange(cinemasName);

                //Go goto next on current page
                try
                {
                    var nextUrl = driver.FindElements(By.PartialLinkText("Next")).Last().GetAttribute("href");
                    driver.Navigate().GoToUrl(nextUrl);
                }
                catch (InvalidOperationException e)
                {
                    //Console.WriteLine(e.Source);
                }
            }

            //close driver
            driver.Dispose();
        }
예제 #8
0
        static void Main(string[] args)
        {
            IWebDriver driver = new PhantomJSDriver();


            driver.Navigate().GoToUrl("https://www.google.com/#q=site:linkedin.com%2Fin%2F+jhon+tech");



            var allLinks = new List <string>();



            for (int i = 0; i < 30; i++)
            {
                List <string> linksList = ExtractElementsSinglePage(driver);

                allLinks.AddRange(linksList);

                var nextUrl = driver.FindElements(By.PartialLinkText("Next")).Last().GetAttribute("href");
                driver.Navigate().GoToUrl(nextUrl);
            }

            var uniqueUrls = allLinks.Distinct().ToList();
        }
예제 #9
0
        public async Task <int> SetIp(string ip, string userEmail)
        {
            IWebDriver browser;
            var        driverdir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

            browser = new PhantomJSDriver(driverdir);
            browser.Manage().Window.Maximize();
            browser.Navigate().GoToUrl("https://www.sharedproxies.com/user.php?s=api");

            IWebElement name     = browser.FindElement(By.Id("Username"));
            IWebElement password = browser.FindElement(By.Name("Password"));

            name.SendKeys("lebedev1");
            password.SendKeys("PfTcjijzIQHZHmzVRx1z" + Keys.Enter);

            IWebElement home = browser.FindElements(By.ClassName("buttonscontainer1")).First().FindElements(By.ClassName("buttons4")).First().FindElement(By.TagName("a"));

            home.Click();

            browser.FindElements(By.TagName("a")).First(f => f.Text == "Change Authorized IPs").Click();


            List <IWebElement> ips = browser.FindElement(By.Id("addipform")).FindElements(By.TagName("input")).ToList();
            bool isNullContains    = false;
            int  idValue           = 0;

            for (int i = 0; (ips.Count() - 1) > i; i++)
            {
                if (ips[i].GetAttribute("value") == "")
                {
                    isNullContains = true;
                    idValue        = i;
                    break;
                }
            }
            if (!isNullContains)
            {
                return(1);
            }
            ips[idValue].SendKeys(ip);
            IWebElement submitButton = browser.FindElements(By.TagName("input")).First(s => s.GetAttribute("value") == "Save Authorized IPs");

            submitButton.Click();
            return(2);
        }
예제 #10
0
        /// <summary>
        /// 解析文件所含的全部资源
        /// </summary>
        /// <param name="url"></param>
        public string SaveFromExtraFile(string url, Guid taskId)
        {
            using (var driver = new PhantomJSDriver(GetPhantomJSDriverService()))
            {
                $"正在加载地址:{url}...".Log(true);
                driver.Navigate().GoToUrl(url);
                //最大化窗口
                MaxBrowser(driver);
                "正在调整浏览器窗体大小...".Log(true);
                //第1次加载更多
                //用户的分享超过一屏时
                IWebElement moreShare = null;
                try
                {
                    moreShare = driver.FindElement(By.LinkText("更多"));
                }
                catch
                {
                    "该用户可分享的内容少于一屏,跳过流程解析...".Log(true);
                }
                if (moreShare != null)
                {
                    "正在点击页面的“更多”按钮...".Log(true);
                    driver.FindElement(By.LinkText("更多")).Click();
                    System.Threading.Thread.Sleep(2000);
                    "正在加载第二页内容...".Log(true);
                    "第二页内容加载完成...".Log(true);
                    //获取需要滚动加载的次数
                    "正在计算全部需要加载的页数...".Log(true);
                    var cardCount   = int.Parse(driver.FindElements(By.CssSelector("._fd86t")).First().Text.Replace(",", ""));
                    var scrollCount = cardCount / 12 == 0 ? cardCount / 12 : (cardCount / 12) + 1;
                    $"计算完成,全部需要加载{scrollCount}页...".Log(true);
                    //默认滚动条移动到y轴3000的位置
                    var initialC = 3000;
                    var i        = 0;
                    "开始执行脚本,滚动鼠标...".Log(true);
                    do
                    {
                        //if (i > 20)//预设只滚动20次,太多次容易卡顿
                        //    break;
                        $"第{i + 1}次滚动...".Log(true);
                        ((IJavaScriptExecutor)driver).ExecuteScript($"scrollTo(0,{initialC});");
                        System.Threading.Thread.Sleep(1000 + (i * 50));
                        i++;
                        initialC += 500;//每次递增滚动500的距离
                    } while (i < scrollCount);
                }
                "页面所有内容全部加载完成...".Log(true);

                var insDir = url.Substring(url.LastIndexOf('/') + 1);

                "正在解析下载的资源...".Log(true);
                ExtraDownloadSource(driver.PageSource, taskId);
                driver.Quit();
                return(insDir);
            }
        }
예제 #11
0
 public void GetData(string upc)
 {
     foreach (var site in sites)
     {
         try
         {
             Dictionary <string, string> results = new Dictionary <string, string>();
             driver.Url = "https://www.amazon.com/";
             driver.Navigate();
             RandomWait();
             driver.FindElement(By.Id("twotabsearchtextbox")).Clear();
             RandomWait();
             driver.FindElement(By.Id("twotabsearchtextbox")).SendKeys(upc);
             RandomWait();
             driver.FindElement(By.ClassName("nav-search-submit")).FindElement(By.ClassName("nav-input")).Click();
             RandomWait();
             var elem = driver.FindElement(By.CssSelector("[class='a-link-normal s-access-detail-page  s-color-twister-title-link a-text-normal']"));
             results.Add("Name", elem.Text);
             results.Add("URL", elem.GetAttribute("href"));
             driver.Url = results["URL"];
             driver.Navigate();
             RandomWait();
             results.Add("Price", driver.FindElement(By.Id("priceblock_ourprice")).Text);
             var elementsASIN = driver.FindElements(By.XPath("//th[contains(text(), 'ASIN')]/parent::tr/td"))
                                .Concat(driver.FindElements(By.XPath("//*[contains(text(), 'ASIN:')]/parent::li")));
             if (elementsASIN.Any())
             {
                 results.Add("ASIN", elementsASIN.First().Text.Replace("ASIN:", ""));
             }
             else
             {
                 // get it from URL
                 throw new Exception("Cannot find ASIN");
             }
             Directory.CreateDirectory(Path.Combine(DATA_PATH, results["ASIN"]));
             //Directory.CreateDirectory(Path.Combine(DATA_PATH, results["ASIN"], site.Name));
             File.WriteAllLines(Path.Combine(DATA_PATH, results["ASIN"], "results.txt"), results.Select(kvp => string.Join("|", kvp.Key, kvp.Value)));
         }
         catch (Exception ex)
         {
             File.WriteAllText(Path.Combine(ERROR_PATH, DateTime.Now.ToString("yyyyMMddTHHmmss") + ".html"), driver.PageSource);
         }
     }
 }
예제 #12
0
        /// <summary>
        /// Select first available for registration date from UI calendar
        /// </summary>
        /// <param name="currentMonth">Current calendar month</param>
        /// <param name="registryFom">lower checking line</param>
        /// <param name="registryTo">higher checking line</param>
        /// <returns></returns>
        protected virtual bool SelectRegistrationDate(DateTime currentMonth,
                                                      DateTime registryFom,
                                                      DateTime registryTo)
        {
            _logger.Trace($"Start SelectRegistrationDate. Error = {Error}. currentMonth = {currentMonth}. registryFom = {registryFom}. registryTo = {registryTo}");
            ReadOnlyCollection <IWebElement> queryCollection;

            try
            {
                var infoText = FindElementWithChecking(By.Id(ErrorMessage)).Text;
                if (infoText.IsNotBlank())
                {
                    _logger.Warn("label with error message is not blank. Thrown new NoSuchElementException");
                    throw new NoSuchElementException();
                }
                queryCollection =
                    _driver.FindElements(By.ClassName(AvailableData));
            }
            catch (Exception ex)
                when(ex is NoSuchElementException || ex is WebDriverException)
                {
                    _logger.Warn("Here is no available dates!!!");
                    return(false);
                }

            var availableRange = GetAvailableRange(currentMonth, registryFom, registryTo);


            foreach (var element in queryCollection)
            {
                var date = element.Text.ConvertToIntOrNull();

                if (date == null ||
                    date.Value > availableRange.Item2 || //endDate
                    date.Value < availableRange.Item1)    //startDate
                {
                    continue;
                }

                if (ReEnterCaptcha)
                {
                    _logger.Info($"GetFirstDate. First available date.Value = {date.Value}. But ReEnterCaptcha = True");
                    return(true);
                }

                _logger.Info(
                    $"GetFirstDate. date.Value = {date.Value} element Click");
                OutData = string.Format(ResManager.GetString(ResKeys.DateSelected_Message), $"{date.Value} {GetCalendarHeader()[1].Text}");
                element.Click();
                return(true);
            }
            return(false);
        }
예제 #13
0
        /// <summary>
        /// Método responsável por retornar uma lista com as vagas anunciadas pela empresa
        /// </summary>
        /// <param name="poPhantom">Objeto phantomjsdriver</param>
        /// <param name="pstrCode">Codigo da empresa</param>
        /// <returns></returns>
        private static List <LinkedinVagas> GetOfficials(PhantomJSDriver poPhantom, string pstrCode)
        {
            var loModel = new List <LinkedinVagas>();

            poPhantom.Navigate().GoToUrl($"https://www.linkedin.com/jobs/search/?locationId=OTHERS%2Eworldwide&f_C={pstrCode}");

            if (poPhantom.FindElements(By.ClassName("job-card__link-wrapper")).Count() > 0)
            {
                var jobs = poPhantom.FindElements(By.ClassName("job-card__link-wrapper"));

                for (int lintCont = 0; lintCont < jobs.Count; lintCont++)
                {
                    var model = new LinkedinVagas();

                    model.Vaga      = jobs[lintCont].FindElement(By.ClassName("truncate-multiline--last-line-wrapper")).Text;
                    model.Descricao = jobs[lintCont].FindElement(By.ClassName("job-card__description-snippet")).Text;
                    model.Local     = jobs[lintCont].FindElement(By.ClassName("job-card__location")).Text;

                    loModel.Add(model);
                }
            }

            return(loModel);
        }
예제 #14
0
 public override bool Execute(PhantomJSDriver driver)
 {
     try
     {
         var passwordBox =
             driver.FindElements(By.TagName("input"))
             .FirstOrDefault(e => e.GetAttribute("type").Contains("password"));
         var userEmailBox =
             driver.FindElements(By.TagName("input"))
             .FirstOrDefault(
                 e =>
                 e.GetAttribute("type").Contains("email") || e.GetAttribute("name").Contains("email") ||
                 e.GetAttribute("type").Contains("user") || e.GetAttribute("name").Contains("user"));
         userEmailBox.SendKeys(Parameters[0]);
         passwordBox.SendKeys(Parameters[1]);
         driver.FindElementByTagName("form").Submit();
         return(true);
     }
     catch (Exception)
     {
         //Something went wrong
         return(false);
     }
 }
예제 #15
0
        static void Main(string[] args)
        {
            IWebDriver driver = new PhantomJSDriver();

            var url = "http://en.wikipedia.org/wiki/Web_scraping";

            driver.Navigate().GoToUrl(url);

            var titles = driver.FindElements(By.CssSelector("#firstHeading"));

            var myFirstScrape = titles.First().Text;

            Console.WriteLine(myFirstScrape);
            Console.ReadLine();
        }
예제 #16
0
        private News GetNews(PhantomJSDriver driver, CrawlerPartConfig cpc, Uri uri, int threadId, int milliseconds)
        {
            string title             = driver.FindElement(By.XPath(cpc.Title_Xpath)).Text;
            var    contentcollection = driver.FindElements(By.XPath(cpc.Content_Xpath));
            string content           = string.Empty;

            foreach (var item in contentcollection)
            {
                content += item.Text;
            }
            string   source      = string.Empty;
            string   editor      = string.Empty;
            DateTime?publishtime = null;

            if (!string.IsNullOrEmpty(cpc.Source_Xpath))
            {
                source = driver.FindElement(By.XPath(cpc.Source_Xpath)).Text;
            }
            if (!string.IsNullOrEmpty(cpc.Editor_Xpath))
            {
                editor = driver.FindElement(By.XPath(cpc.Editor_Xpath)).Text;
            }
            if (!string.IsNullOrEmpty(cpc.PublishTime_Xpath))
            {
                publishtime = Convert.ToDateTime(driver.FindElement(By.XPath(cpc.PublishTime_Xpath)).Text.TrimStart().Substring(0, 16));
            }

            News news = new News()
            {
                Id = Guid.NewGuid(),
                CrawlerConfigId = cpc.CrawlerConfigId,
                Title           = title,
                Content         = content,
                Editor          = editor,
                Source          = source,
                Address         = uri.ToString(),
                SpendTime       = milliseconds,
                ThreadId        = threadId,
                PublishTime     = publishtime
            };

            //WriteLog.InsertLogs(uri.ToString(), "步骤二");
            return(news);
        }
예제 #17
0
 private IWebElement FindElementIfExists(By by)
 {
     try
     {
         IWebElement webElement;
         new WebDriverWait(driver, TimeSpan.FromSeconds(web_el_wait)).Until(ExpectedConditions.ElementExists(by));
         var webElements = driver.FindElements(by);
         if (webElements.Count >= 1)
         {
             webElement = webElements.First <IWebElement>();
         }
         else
         {
             webElement = null;
         }
         return(webElement);
     }
     catch
     {
         return(null);
     }
 }
예제 #18
0
        static void Main(string[] args)
        {
            IWebDriver driver = new PhantomJSDriver();

            var url = "http://en.wikipedia.org/wiki/Web_scraping";

            driver.Navigate().GoToUrl(url);

            var tocElements = driver.FindElements(By.CssSelector("#toc>ul"));

            var allElements = tocElements[0].FindElements(By.TagName("li"));

            var allRefs = new List <string>();

            foreach (var item in allElements)
            {
                var textOnly = String.Join(" ", item.Text.Split(' ').Skip(1));
                allRefs.Add(textOnly);
            }

            Console.WriteLine(allRefs.ToString());
            Console.Read();
        }
예제 #19
0
 private void StartSync(CrawlerPartConfig cpc, string Address, ref List <Target> List_tar)
 {
     try
     {
         Uri uri = new Uri(Address);
         if (cpc.FetchModel == 1)
         {
             PhantomJSDriver driver          = sc.StartSync(uri, null, null);
             var             titlecollection = driver.FindElements(By.XPath(cpc.IndexLink_XPath));
             foreach (var item in titlecollection)
             {
                 if (!string.IsNullOrEmpty(item.Text))
                 {
                     Target t = new Target
                     {
                         Name      = item.Text,
                         Uri       = item.GetAttribute("href"),
                         Operation = null,
                         CPC       = cpc
                     };
                     List_tar.Add(t);
                 }
             }
             driver.Quit();
         }
         else if (cpc.FetchModel == 3)
         {
             Operation opera = new Operation
             {
                 Action = (x) =>
                 {
                     x.FindElement(By.XPath(cpc.LoadMoreButton_XPath)).Click();
                 },
                 Condition = (x) =>
                 {
                     return(!x.FindElement(By.XPath(cpc.ExtentionData1)).Displayed);
                 },
                 Timeout        = 10000,
                 ExtentionData1 = cpc.ExtentionData1,
                 ExtentionData2 = cpc.ExtentionData2,
                 ExtentionData3 = cpc.ExtentionData3
             };
             PhantomJSDriver driver          = sc.StartSync(uri, null, opera);
             var             titlecollection = driver.FindElements(By.XPath(cpc.IndexLink_XPath));
             foreach (var item in titlecollection)
             {
                 if (!string.IsNullOrEmpty(item.Text))
                 {
                     Target t = new Target
                     {
                         Name      = item.Text,
                         Uri       = item.GetAttribute("href"),
                         Operation = null,
                         CPC       = cpc
                     };
                     List_tar.Add(t);
                 }
             }
             driver.Quit();
         }
         else if (cpc.FetchModel == 5)
         {
             Script script = new Script()
             {
                 Code      = "document.body.scrollTop=10000",
                 Condition = (x) =>
                 {
                     return(!x.FindElement(By.XPath(cpc.ExtentionData1)).Displayed);
                 },
                 ActionTimes = Convert.ToInt32(cpc.ExtentionData4),
                 FetchModel  = 5,
                 Timeout     = 10000
             };
             PhantomJSDriver driver          = sc.StartSync(uri, script, null);
             var             titlecollection = driver.FindElements(By.XPath(cpc.IndexLink_XPath));
             foreach (var item in titlecollection)
             {
                 if (!string.IsNullOrEmpty(item.Text))
                 {
                     Target t = new Target
                     {
                         Name      = item.Text,
                         Uri       = item.GetAttribute("href"),
                         Operation = null,
                         CPC       = cpc
                     };
                     List_tar.Add(t);
                 }
             }
             driver.Quit();
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
예제 #20
0
        public bool Login(string email1, string password)
        {
            List <MyPlaylist> myplaylists = new List <MyPlaylist>();
            MyPlaylist        playlist1   = new MyPlaylist();
            List <MyPlaylist> myPlaylist  = new List <MyPlaylist>();

            var service = PhantomJSDriverService.CreateDefaultService();

            service.HideCommandPromptWindow = true;
            IWebDriver driver = new PhantomJSDriver(service);

            driver.Url = "http://www.playzer.fr/customer/login";
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
            Thread.Sleep(TimeSpan.FromSeconds(1));

            driver.FindElement(By.Id("customer_login_login")).SendKeys(email1);
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
            driver.FindElement(By.Id("customer_login_password")).SendKeys(password);
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

            IWebElement         btn = driver.FindElements(By.XPath(".//button[@onclick]"))[1];
            IJavaScriptExecutor js  = (IJavaScriptExecutor)driver;

            js.ExecuteScript("arguments[0].click();", btn);
            Thread.Sleep(TimeSpan.FromSeconds(1));
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));


            driver.Navigate().GoToUrl("http://www.playzer.fr/customer/account");
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));


            string s = driver.FindElement(By.XPath("//*[@id='account']/div/h2[1]")).Text;

            Thread.Sleep(TimeSpan.FromSeconds(1));

            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
            if ("You are not logged in" == s)
            {
                return(false);
            }
            else
            {
                if (!File.Exists(email1 + "Playlists.txt"))
                {
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                    IWebElement nav_menu = driver.FindElement(By.Id("nav_menu"));
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                    js.ExecuteScript("arguments[0].click();", nav_menu);
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));


                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='nav_menu']/ul")));
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='nav_menu']/ul/div[1]")));
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='nav_menu']/ul/div[1]/div[2]")));
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.Id("menu_myplaylists")));
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));



                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));


                    IReadOnlyCollection <IWebElement> all_playlist = driver.FindElements(By.XPath("//div[@class='content home_playlist transition']"));
                    Thread.Sleep(TimeSpan.FromSeconds(1));


                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
                    int i = 1;
                    foreach (IWebElement playlist in all_playlist)
                    {
                        string id = playlist.GetAttribute("id");
                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                        IWebElement playlist_option_btn = driver.FindElement(By.XPath("//*[@id='" + id + "_options" + "']"));
                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                        js.ExecuteScript("arguments[0].click();", playlist_option_btn);
                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                        IWebElement edit_btn = driver.FindElement(By.XPath("//div[@class='edit transition']"));
                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                        js.ExecuteScript("arguments[0].click();", edit_btn);
                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));

                        IWebElement song_items = driver.FindElement(By.XPath("//ul[@id='playlist_items']"));

                        Thread.Sleep(TimeSpan.FromSeconds(1));

                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                        IReadOnlyCollection <IWebElement> songs = song_items.FindElements(By.ClassName("content"));
                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));

                        playlist1            = new MyPlaylist();
                        playlist1.Title      = driver.FindElement(By.XPath("//*[@id='playlist_edit_name']")).GetAttribute("value");
                        playlist1.SelectedId = i;

                        foreach (IWebElement song in songs)
                        {
                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                            string id_song = song.GetAttribute("id");
                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                            string title = driver.FindElement(By.XPath("//*[@id='" + id_song + "']/div[4]")).Text;
                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                            string artist = driver.FindElement(By.XPath("//*[@id='" + id_song + "']/div[5]")).Text;
                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                            string url = driver.FindElement(By.XPath("//*[@id='" + id_song + "']/div[3]/img")).GetAttribute("src");
                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                            Song track = new Song(title, artist, id_song, url, i);
                            playlist1.Songs.Add(track);
                            playlist1.NumOfSongs = songs.Count;
                            playlist1.Url        = url;
                        }
                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                        myplaylists.Add(playlist1);

                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                        js.ExecuteScript("arguments[0].click();", driver.FindElement(By.Id("close_modify")));
                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                        js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='playlist_options']/div[1]/img")));
                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                        i++;
                    }
                    driver.Close();
                    driver.Dispose();
                    driver.Quit();


                    PlaylistDetailsWindow.all_playlists = myplaylists;
                    MainWindow.allPL = myplaylists;

                    using (StreamWriter theWriter = new StreamWriter(email1 + "Playlists.txt"))
                    {
                        try
                        {
                            int cntlist = 0;
                            foreach (MyPlaylist mp in myplaylists)
                            {
                                cntlist++;
                                theWriter.WriteLine("PLAYLIST " + cntlist + "*#" + mp.Title + "*#" + mp.Url);
                                theWriter.WriteLine();
                                int cntSong = 0;
                                foreach (Song song in mp.Songs)
                                {
                                    cntSong++;
                                    theWriter.WriteLine("SONG " + cntSong + "|?" + song.Id + "|?" + song.Title + "|?" + song.Artist + "|?" + song.Url);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                    using (StreamWriter theWriter = new StreamWriter(email1 + ".txt"))
                    {
                        try
                        {
                            theWriter.Write(password);
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                }
                else
                {
                    List <MyPlaylist> plejliste = new List <MyPlaylist>();
                    string            path1     = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

                    string text = File.ReadAllText(Path.Combine(path1, email1 + "Playlists.txt"));

                    string[] plist = text.Split(new string[] { "PLAYLIST " }, StringSplitOptions.None);

                    foreach (string lists in plist)
                    {
                        if (lists != "")
                        {
                            MyPlaylist mpl = new MyPlaylist();
                            int        selected;
                            string[]   items = lists.Split(new string[] { "*#" }, StringSplitOptions.None);
                            Int32.TryParse(items[0], out selected);
                            mpl.SelectedId = selected;
                            mpl.Title      = items[1];
                            mpl.Url        = items[2].Split('\n')[0].Split('\r')[0];

                            string[] tracks = items[2].Split(new string[] { "\r\n\r\n" }, StringSplitOptions.None);
                            string[] tr     = tracks[1].Split(new string[] { "\r\n" }, StringSplitOptions.None);

                            foreach (string track in tr)
                            {
                                if (track != "")
                                {
                                    string[] song_stuff = track.Split(new string[] { "|?" }, StringSplitOptions.None);
                                    int      selectedtr;
                                    Int32.TryParse(song_stuff[0].Split(' ')[1], out selectedtr);
                                    Song song = new Song(song_stuff[2], song_stuff[3], song_stuff[1], song_stuff[4], selectedtr);
                                    mpl.NumOfSongs = tr.Count() - 1;
                                    mpl.Songs.Add(song);
                                }
                            }
                            plejliste.Add(mpl);
                        }
                    }


                    MainWindow.allPL = plejliste;
                }



                driver.Quit();

                return(true);
            }
        }
예제 #21
0
        void addPlaylists(List <MyPlaylist> data)
        {
            List <Song> search_results = new List <Song>();
            IReadOnlyCollection <IWebElement> search_content;
            List <string>     search_content_ids = new List <string>();
            List <MyPlaylist> plejliste          = new List <MyPlaylist>();
            MyPlaylist        pl  = new MyPlaylist();
            List <MyPlaylist> lmp = new List <MyPlaylist>();

            foreach (var playlist in data)
            {
                TrackInPlaylistControl control = new TrackInPlaylistControl();
                control.Playlist = playlist;

                control.OnPlaylistSelected += async(s, e) =>
                {
                    Cursor = Cursors.Wait;

                    try
                    {
                        if (!control.Added)
                        {
                            var service = PhantomJSDriverService.CreateDefaultService();
                            service.HideCommandPromptWindow = true;
                            IWebDriver driver = new PhantomJSDriver(service);
                            driver.Url = "http://www.playzer.fr/customer/login";

                            IJavaScriptExecutor js = (IJavaScriptExecutor)driver;

                            driver.FindElement(By.Id("customer_login_login")).SendKeys(MainWindow.Email);
                            driver.FindElement(By.Id("customer_login_password")).SendKeys(MainWindow.Pass);
                            IWebElement btn = driver.FindElements(By.XPath(".//button[@onclick]"))[1];
                            js.ExecuteScript("arguments[0].click();", btn);


                            Thread.Sleep(TimeSpan.FromSeconds(1));
                            js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='panel_search']/img")));
                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                            Thread.Sleep(TimeSpan.FromSeconds(1));
                            driver.FindElement(By.Id("search_engine")).SendKeys(MainWindow.sb);
                            Thread.Sleep(TimeSpan.FromSeconds(2));
                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                            IWebElement result = driver.FindElement(By.Id("search_results"));
                            search_content = result.FindElements(By.XPath("//div[@class='content transition search_item_content']"));
                            int i = 1;

                            foreach (IWebElement ids in search_content)
                            {
                                string song_id = ids.GetAttribute("id");
                                if (i == Track.Selected)
                                {
                                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='" + song_id + "']")));

                                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='panel_history']")));
                                    Thread.Sleep(TimeSpan.FromSeconds(1));
                                    string songID = driver.FindElements(By.ClassName("bloc"))[0].GetAttribute("id");
                                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='" + songID + "_options']")));

                                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//div[@class='add transition']")));

                                    driver.FindElement(By.Id("content_add_form"));


                                    IReadOnlyCollection <IWebElement> all_plist = driver.FindElements(By.XPath("//div[@class='item choice']"));

                                    int j = 1;

                                    foreach (IWebElement choice_id in all_plist)
                                    {
                                        if (j == control.Playlist.SelectedId)
                                        {
                                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                                            js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='" + choice_id.GetAttribute("id") + "_status']")));
                                            break;
                                        }
                                        j++;
                                    }
                                    break;
                                }
                                i++;
                            }



                            driver.Navigate().Refresh();

                            js.ExecuteScript("arguments[0].click();", driver.FindElement(By.Id("menu_myplaylists")));
                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                            IReadOnlyCollection <IWebElement> all_playlist = driver.FindElements(By.XPath("//div[@class='content home_playlist transition']"));
                            Thread.Sleep(TimeSpan.FromSeconds(2));

                            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
                            MyPlaylist playlist1 = new MyPlaylist();
                            int        cnt       = 1;

                            foreach (MyPlaylist mp in LoadPlaylist())
                            {
                                if (mp.SelectedId != control.Playlist.SelectedId)
                                {
                                    plejliste.Add(mp);
                                }
                            }
                            foreach (IWebElement playL in all_playlist)
                            {
                                try
                                {
                                    string id = playL.GetAttribute("id");
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                                    IWebElement playlist_option_btn = driver.FindElement(By.XPath("//*[@id='" + id + "_options" + "']"));
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                                    js.ExecuteScript("arguments[0].click();", playlist_option_btn);
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                                    IWebElement edit_btn = driver.FindElement(By.XPath("//div[@class='edit transition']"));
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                                    js.ExecuteScript("arguments[0].click();", edit_btn);
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));

                                    IWebElement song_items = driver.FindElement(By.XPath("//ul[@id='playlist_items']"));
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                                    IReadOnlyCollection <IWebElement> songs = song_items.FindElements(By.ClassName("content"));
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));

                                    playlist1            = new MyPlaylist();
                                    playlist1.Title      = driver.FindElement(By.XPath("//*[@id='playlist_edit_name']")).GetAttribute("value");
                                    playlist1.SelectedId = 1;

                                    foreach (IWebElement song in songs)
                                    {
                                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                                        string id_song = song.GetAttribute("id");
                                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                                        string title = driver.FindElement(By.XPath("//*[@id='" + id_song + "']/div[4]")).Text;
                                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                                        string artist = driver.FindElement(By.XPath("//*[@id='" + id_song + "']/div[5]")).Text;
                                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                                        string url = driver.FindElement(By.XPath("//*[@id='" + id_song + "']/div[3]/img")).GetAttribute("src");
                                        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                                        Song track = new Song(title, artist, id_song, url, i);
                                        playlist1.Songs.Add(track);
                                        playlist1.NumOfSongs = songs.Count;
                                        playlist1.Url        = url;
                                    }

                                    plejliste.Add(playlist1);
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.Id("close_modify")));
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                                    js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='playlist_options']/div[1]/img")));
                                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                                }
                                catch (Exception ex)
                                {
                                }
                                break;
                            }
                            driver.Close();
                            driver.Quit();

                            SaveToFile(plejliste);


                            MessageBox.Show("Added to playlist " + playlist.Title, "Info", MessageBoxButton.OK, MessageBoxImage.Information);
                            control.Added      = true;
                            MainWindow.changed = true;
                            //  MainWindow.allPL = plejliste;
                        }
                    }
                    finally
                    {
                        Cursor = Cursors.Arrow;
                    }
                };
                stack.Children.Add(control);
            }
        }
        static void Main(string[] args)
        {
            bool Cerrado = false;

            var driverService = PhantomJSDriverService.CreateDefaultService();

            driverService.HideCommandPromptWindow = true;

            IWebDriver driver = new PhantomJSDriver(driverService);

            Console.WriteLine("Datos procesados");
            Console.WriteLine("-----------------");
            using (baseprod2Entities context = new baseprod2Entities())
            {
                List <SP_S_LeadsNoProcesados_Scotiabank_Result> procesar = context.SP_S_LeadsNoProcesados_Scotiabank().ToList();
                foreach (var lead in procesar)
                {
                    driver.Navigate().GoToUrl("https://sac.scotiabank.indexa.cl/SAC/simular/Solicitud.asp?Tipo_Cuota=CI&tipocre=121&fpago=Cuenta+Corriente+&monto=" +
                                              lead.monto_credito + "&valor=" + lead.monto_credito + "&ncuotas=" + lead.nro_cuotas + "&primerpago=16%2F02%2F2018&mnp1=0&mnp2=0&SDesgravamen=&SCesantia=&Total_Financiar=3158266&Valor_Cuota=" + lead.valor_cuota + "&Impuesto_Pagare=25266&Monto_SeguroDesgravamen=0&Monto_SeguroCesantia=0&Total_Recargos=133000&canal_origen=");
                    IWebElement qname = driver.FindElement(By.Name("nombre"));
                    qname.SendKeys("Chile");

                    IWebElement qpaterno = driver.FindElement(By.Name("paterno"));
                    qpaterno.SendKeys("autos");

                    IWebElement qmaterno = driver.FindElement(By.Name("materno"));
                    qmaterno.SendKeys("SpA");

                    IWebElement qrut = driver.FindElement(By.Name("rut"));
                    qrut.SendKeys(lead.rut.Replace("-", ""));

                    IWebElement qtfijo = driver.FindElement(By.Name("tfijo"));
                    qtfijo.SendKeys(lead.telefono);

                    IWebElement qtcelular = driver.FindElement(By.Name("tcelular"));
                    qtcelular.SendKeys(lead.telefono);

                    IWebElement qemail = driver.FindElement(By.Name("email"));
                    qemail.SendKeys(lead.email);

                    IWebElement qrenta = driver.FindElement(By.Name("renta"));
                    qrenta.SendKeys("0");

                    IWebElement qfnacimiento = driver.FindElement(By.Name("fnacimiento"));
                    qfnacimiento.SendKeys("01/01/1998");

                    IWebElement qantiguedad = driver.FindElement(By.Name("antiguedad"));
                    qantiguedad.SendKeys("2");

                    IWebElement qempleador = driver.FindElement(By.Name("empleador"));
                    qempleador.SendKeys("Sin especificar");

                    IList <IWebElement> qtipocontratos = driver.FindElements(By.Name("tipocontrato"));
                    qtipocontratos.ElementAt(0).Click();


                    driver.FindElement(By.ClassName("btn-simula-form")).Click();
                    driver.Manage().Timeouts().ImplicitWait = new TimeSpan(15);

                    try
                    {
                        if (driver.FindElement(By.TagName("p")).Text.Contains("Nos comunicaremos al mail informado"))
                        {
                            //cambio el estado del lead
                            SP_U_MarcaLeads_Scotiabank_Result resultado = context.SP_U_MarcaLeads_Scotiabank(lead.rut, lead.telefono, lead.email, lead.monto_credito, lead.nro_cuotas, lead.valor_cuota).FirstOrDefault();
                            if (resultado != null && resultado.actualizado == 1)
                            {
                                Console.WriteLine("Rut:" + lead.rut + ", Teléfono:" + lead.telefono + ", email:" + lead.email + ", monto crédito:" + lead.monto_credito +
                                                  ", cuotas:" + lead.nro_cuotas + ", valor cuota:" + lead.valor_cuota);
                            }
                        }
                    }
                    catch (NoSuchElementException)
                    {
                        Console.WriteLine("No se procesó (por ahora)");
                        Console.WriteLine("Rut:" + lead.rut + ", Teléfono:" + lead.telefono + ", email:" + lead.email + ", monto crédito:" + lead.monto_credito +
                                          ", cuotas:" + lead.nro_cuotas + ", valor cuota:" + lead.valor_cuota);
                        driver.Quit();
                        Cerrado = true;
                    }
                    finally
                    {
                        if (Cerrado)
                        {
                            driver = new PhantomJSDriver(driverService);
                        }
                    }
                }
            }
            driver.Quit();
        }
예제 #23
0
        public static String GetDpsLookupHtmlResult(
            String userName,
            String passWord,
            String searchBy,
            String query,
            Action <String, Int32> onStepChanged,
            Action <String> onCompleted)
        {
            //Instantiate web browser simulator
            onStepChanged("Instantiating PhantomJS...", 0);
            var driverService = PhantomJSDriverService.CreateDefaultService();

            driverService.HideCommandPromptWindow = true;
            var webDriver = new PhantomJSDriver(driverService);

            try
            {
                //Navigate to the initial login page
                onStepChanged("Navigating to initial page...", 25);
                webDriver.Navigate().GoToUrl(DpsLookUpParser.InitialUrl);
                //Wait until page is loaded and login button is available
                var buttonLogin = webDriver.FindElement(By.Id("btnLogin"));
                //Populate login and password fields
                webDriver.FindElement(By.Name("UserName")).SendKeys(userName);
                webDriver.FindElement(By.Name("Password")).SendKeys(passWord);
                //Submit login
                onStepChanged("Submitting credentials...", 50);
                buttonLogin.Submit();
                //Wait until the page loads
                DpsLookUpParser.WaitUntilPageIsLoaded(webDriver);
                //Check if login was correct
                if (webDriver.Url == DpsLookUpParser.InitialUrl)
                {
                    //If URL remains the same, that does mean login failure
                    throw new Exception("Incorrect credentials");
                }
                else
                {
                    //Browser is on a search page. Get the search category radiobuttons
                    var checkboxesSearchType = webDriver.FindElements(By.Name("searchtype"));
                    switch (searchBy)
                    {
                    case "vinnumber":
                        checkboxesSearchType[0].Click();
                        break;

                    case "licensenumber":
                        checkboxesSearchType[1].Click();
                        break;

                    default:
                        throw new Exception("[searchBy] must be equal to 'vinnumber' or 'licensenumber'");
                    }
                    //Populate input with the given VIM or license plate number
                    webDriver.FindElement(By.Name("searchData")).SendKeys(query);
                    //Submit input
                    webDriver.FindElement(By.Name("search_now")).Submit();
                    //Wait until AJAX performs to the end so the table appears
                    onStepChanged("Loading data...", 75);
                    (new WebDriverWait(webDriver, DpsLookUpParser.Timeout))
                    .Until(ExpectedConditions.ElementExists(By.TagName("table")));
                    //Check if the query was correct
                    if (webDriver.FindElements(By.ClassName("alert-error")).Count != 0)
                    {
                        //If there is HTML element with 'alert-error' class, that means data was wrong
                        throw new Exception("[query] does not represent some existing [" + searchBy + "]");
                    }
                    else
                    {
                        onStepChanged("Data has been successfully loaded!", 100);
                        onCompleted(webDriver.PageSource);
                        return(webDriver.PageSource);
                    }
                }
            }
            catch (Exception exception)
            {
                driverService.Dispose();
                webDriver.Quit();
                throw exception;
            }
            finally
            {
                driverService.Dispose();
                webDriver.Quit();
            }
        }
예제 #24
0
        /// <summary>
        /// 解析出需要下载的资源数并添加到数据库
        /// </summary>
        /// <param name="htmlFilePath">已经解析的html文件</param>
        public void ExtraDownloadSource(string html, Guid taskId)
        {
            //解析出资源
            var regExt = new Regex("\\<a\\s*href\\=\"(?<href>\\/p\\/\\S+\\/)\"\\>");
            var matchs = regExt.Matches(html);

            var task = mediaService.GetMediatask(taskId);

            if (matchs != null && matchs.Count > 0)
            {
                for (int i = 0; i < matchs.Count; i++)
                {
                    //明细页面路径
                    var url = baseHttpUrl + matchs[i].Groups["href"].Value;
                    using (var driver = new PhantomJSDriver(PhantomJSDriverService.CreateDefaultService()))
                    {
                        //解析文件
                        $"正在浏览资源:{url}".Log(true);
                        driver.Navigate().GoToUrl(url);
                        var htmlDetail = driver.PageSource;
                        IList <IWebElement> mediaUrls = new List <IWebElement>();
                        try
                        {
                            var img = driver.FindElementByCssSelector("._2di5p");
                            if (img != null)
                            {
                                mediaUrls.Add(img);
                                "找到资源所在的唯一标签".Log(true);
                            }
                        }
                        catch
                        {
                            mediaUrls = driver.FindElements(By.TagName("img"));
                            "找到资源的img标签".Log(true);
                        }
                        driver.Quit();
                        foreach (var item in mediaUrls)
                        {
                            var mediaUrl = item.GetAttribute("src");
                            $"上传下载任务:{mediaUrl}".Log(true);
                            mediaService.AddDownload(new DownloadEntity
                            {
                                DownloadId     = Guid.NewGuid(),
                                SortValue      = DateTime.Now.ToString("yyyyMMddHHmmssfff"),
                                Disabled       = 0,
                                Rec_CreateBy   = Guid.Empty,
                                Rec_CreateTime = DateTime.Now,
                                Rec_ModifyBy   = Guid.Empty,
                                Rec_ModifyTime = DateTime.Now,
                                HttpUrl        = mediaUrl,
                                DirName        = task.Url.Substring(task.Url.LastIndexOf('/') + 1)
                            });
                        }
                    }
                }
                "该用户全部任务收集完毕!".Log(true);
                task.Disabled = 1;
                mediaService.UpdateMediatask(task);
                "更新用户资源解析任务的状态为已解析...".Log(true);
            }
        }
예제 #25
0
        public static List <data> GetHistroyData(PublishMessage pmessage)
        {
            try
            {
                var dataList = new List <data>();
                using (var seleminun = new PhantomJSDriver())
                {
                    string t   = HttpUtility.UrlDecode(string.Format("{0}{1}", pmessage.DataTime.Value.Year, pmessage.DataTime.Value.Month.ToString("00")));
                    string url = string.Format("{0}&month={1}", pmessage.Url.Trim(), t);
                    seleminun.Navigate().GoToUrl(url);
                    Thread.Sleep(new Random().Next(1000, 2000));
                    var rowEs = seleminun.FindElements(By.XPath("//div[@class=\"row\"]/div/table/tbody/tr"));
                    Console.WriteLine(rowEs.Count);

                    string path = string.Format("{0}\\{1}", Environment.CurrentDirectory, "data");
                    {
                        for (int rowIndex = 1; rowIndex < rowEs.Count; rowIndex++)
                        {
                            var trEs     = rowEs[rowIndex].FindElements(By.XPath(".//td"));
                            var tempdata = new data()
                            {
                                name = pmessage.Name
                            };
                            tempdata.date = DateTime.Parse(trEs[0].Text);
                            tempdata.aqi  = trEs[1].Text;
                            tempdata.rank = trEs[2].Text;
                            int p25, p10, so2, co, no2, O3_8h;
                            if (int.TryParse(trEs[3].Text, out p25))
                            {
                                tempdata.pm2d5 = p25;
                            }

                            if (int.TryParse(trEs[4].Text, out p10))
                            {
                                tempdata.pm10 = p10;
                            }

                            if (int.TryParse(trEs[5].Text, out so2))
                            {
                                tempdata.so2 = so2;
                            }

                            if (int.TryParse(trEs[6].Text, out co))
                            {
                                tempdata.co = co;
                            }

                            if (int.TryParse(trEs[7].Text, out no2))
                            {
                                tempdata.no2 = no2;
                            }

                            if (int.TryParse(trEs[8].Text, out O3_8h))
                            {
                                tempdata.no2 = no2;
                            }
                            tempdata.updatetime = DateTime.Now;
                            dataList.Add(tempdata);
                        }
                    }
                }

                return(dataList);
            }
            catch (Exception err)
            {
                Console.WriteLine(err.Message);
                Console.WriteLine(err.StackTrace);
                return(null);
            }
        }
예제 #26
0
        public static void TrackWithoutBrowser()
        {
            // initialize a WebDriver instance
            IWebDriver    driver     = new PhantomJSDriver();
            WebDriverWait driverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

            driver.Manage().Window.Maximize();
            // load search page
            driver.Navigate().GoToUrl("http://www.purolator.com/purolator/ship-track/tracking-summary.page?submit=true&componentID=1359477580240");
            // wait 5 seconds
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
            // write page
            using (Stream stream = File.Open(@"d:\delete\selenium\1.html", FileMode.Create, FileAccess.ReadWrite))
            {
                using (BinaryWriter writer = new BinaryWriter(stream))
                {
                    byte[] bytes = Encoding.UTF8.GetBytes(driver.PageSource);
                    stream.Write(bytes, 0, bytes.Length);
                }
            }

            Console.WriteLine("Page title: " + driver.Title);
            // enter tracking number and submit
            IWebElement element = driver.FindElement(By.CssSelector("form textarea#search"));

            element.SendKeys("JFV242486848");
            element.Submit();
            //// wait 5 seconds
            //driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
            //// write result page
            //using (Stream stream = File.Open(@"d:\delete\selenium\2.html", FileMode.Create, FileAccess.ReadWrite))
            //{
            //    using (BinaryWriter writer = new BinaryWriter(stream))
            //    {
            //        byte[] bytes = Encoding.UTF8.GetBytes(driver.PageSource);
            //        stream.Write(bytes, 0, bytes.Length);
            //    }
            //}



            // locate the tracking history table
            var    trackingHistory = driver.FindElement(By.CssSelector("#historyDiv table#history tbody"));
            string result          = trackingHistory.Text;
            var    rows            = trackingHistory.FindElements(By.TagName("tr")).ToList();
            string locationPath    = "//td[@class='location']";
            //var locations = driverWait.Until(drv => drv.FindElements(By.XPath("//td[@class='location']")));
            //driverWait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//td[@class='location']")));
            var locations = driver.FindElements(By.XPath(locationPath));

            foreach (var location in locations)
            {
                string a = location.Text;
            }
            foreach (var row in rows)
            {
                var    t          = row.FindElements(By.TagName("td"));
                string location   = row.FindElements(By.ClassName("location")).FirstOrDefault().Text;
                string event_name = row.FindElements(By.TagName("td"))[3].Text;
            }
            // quit the driver
            driver.Quit();
        }
예제 #27
0
 /// <summary>
 /// Our objective from here is to get the json data in the source and save it.  We'll pull it apart later.
 /// </summary>
 /// <param name="args"></param>
 static void Main(string[] args)
 {
     try
     {
         Console.WriteLine("Hit enter to start the magic.....");
         Console.ReadLine();
         string uid = "*****@*****.**", pwd = "leblanc2016";
         //
         PhantomJSOptions options = new PhantomJSOptions();
         //
         driver.Manage().Timeouts().ImplicitWait = implicitWait;
         driver.Manage().Timeouts().PageLoad = pageLoadWait;
         //I can't really say what this might do but f**k it, why not?
         driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);
         driver.Navigate().GoToUrl("http://www.loopnet.com/xNet/MainSite/User/customlogin.aspx?LinkCode=31824");
         //var bigAssTextBox = driver.FindElementByName("geography");
         //Console.WriteLine("This element has this for a class value: " + bigAssTextBox.GetAttribute("class"));
         //login
         driver.FindElement(By.Name("ctlLogin$LogonEmail")).SendKeys(uid);
         driver.FindElement(By.Name("ctlLogin$LogonPassword")).SendKeys(pwd);
         driver.FindElement(By.Id("ctlLogin_btnLogon")).Click();
         //Go to the searches page
         //
         driver.Navigate().GoToUrl("http://www.loopnet.com/xNet/MainSite/Listing/SavedSearches/MySavedSearches_FSFL.aspx?LinkCode=29400");
         //
         //Get the search names first, then get their urls
         //
         var submarketNamesCollection = driver.FindElement(By.ClassName("savedSearchContainer")).FindElements(By.XPath("./tbody/tr/td[2]"));
         var searchLinkElements       = driver.FindElementsByXPath("//*[@id='form1']/div[5]/div/div/table/tbody/tr/td[1]/div/a[1]");
         //Spin up a collection to hold our data from here on out
         //
         List <BaseSearch> recoveredSearches = new List <BaseSearch>();
         if (submarketNamesCollection.Count != searchLinkElements.Count)
         {
             throw new Exception($"Submarket/Search names count: {submarketNamesCollection.Count}. Doesn't equal recovered link elements count: {searchLinkElements.Count}");
         }
         for (int i = 0; i < submarketNamesCollection.Count; i++)
         {
             recoveredSearches.Add(new BaseSearch()
             {
                 Name = submarketNamesCollection[i].Text, BaseResultsURL = searchLinkElements[i].GetAttribute("href")
             });
         }
         //Iterate through the results and do your thing
         for (int searchIndex = 0; searchIndex < recoveredSearches.Count; searchIndex++)
         {
             var currentSearch = recoveredSearches[searchIndex];
             driver.Navigate().GoToUrl(currentSearch.BaseResultsURL);
             //Property name is in the title attribute of these link elements
             var propertyNamesList = driver.FindElements(By.XPath("//*[@id='placardSec']//h5[@class = 'listing-address']/a")).Select(x => x.GetAttribute("title")).ToList <string>();
             //Let's get the building class since they need that.  May also need broker info.
             var possibleBldgClasses = driver.FindElements(By.XPath("//*[@id='placardSec']/div[2]/div/article/div[1]/section[2]/div[1]/ul/li[3]/i")).Select(x => x.Text.Trim()).ToList <string>();
             //Make sure the classes list and names list are 1 to 1
             if (propertyNamesList.Count != possibleBldgClasses.Count)
             {
                 throw new Exception($"The property names list count: {propertyNamesList.Count} does not match the Bldg Class candidate list count: {possibleBldgClasses.Count}");
             }
             for (int tempIndex = 0; tempIndex < propertyNamesList.Count; tempIndex++)
             {
                 currentSearch.Listings.Add(new Listing()
                 {
                     PropertyName = propertyNamesList[tempIndex],
                     BldgClass    = char.IsLetter(possibleBldgClasses[tempIndex][0]) ? possibleBldgClasses[tempIndex] : "N/A"
                 });
             }
             //Broker info.  Deal with that later.
             //Click the create reports button
             //
             driver.FindElement(By.XPath("/html/body/section/main/section/div/section[1]//div[@class='toolbar-right']/div/button")).Click();
             //Select all reports
             //
             bool firstTry = true;
             bool lastPage = false;
             while (!lastPage)
             {
                 //We're already on the page for the first group we need to select, so we don't go to the next one on the first go around
                 //
                 if (!firstTry)
                 {
                     //firstTry = false;
                     FlipDriverTimeout(true);
                     var nextPageLinkContainer = driver.FindElements(By.CssSelector("a.caret-right-large"));
                     FlipDriverTimeout(false);
                     if (nextPageLinkContainer?.Count > 0)
                     {
                         nextPageLinkContainer[0].Click();
                     }
                     else
                     {
                         lastPage = true;
                     }
                 }
                 firstTry = false;
                 //Select all the elements then circle around to the next page and repeat.
                 //
                 //driver.GetScreenshot();
                 var selectAllButton = driver.FindElement(By.XPath("//button[text()='Select all']"));
                 ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click();", selectAllButton);
                 //OpenQA.Selenium.Interactions.Actions actions = new OpenQA.Selenium.Interactions.Actions(driver);
                 //actions.MoveToElement(selectAllButton);
                 //actions.Perform();
                 //
                 //selectAllButton.Click();
             }
             //Onward to our report. Click the big red generate reports button.
             driver.FindElement(By.XPath("//button[text()='Generate Reports']")).Click();
             //
             //Select listing summary report radio button
             driver.FindElement(By.Id("listingSummary")).Click();
             //
             driver.FindElement(By.Id("btnCreateReport1")).Click();
             //
             driver.SwitchTo().Frame("reportFrame");
             //Get that dirty JSON
             string source = driver.PageSource;
             source = source.Substring(source.IndexOf("\"Data\":{\"Report\":"));
             source = source.Substring(0, source.IndexOf("Config={")).Trim();
             //If this is indeed valid JSON, save it.
             currentSearch.rawJSON = source;
             //
             if (Directory.Exists(jsonOutputDirectory) == false)
             {
                 Directory.CreateDirectory(jsonOutputDirectory);
             }
             //
             File.WriteAllText(jsonOutputDirectory + "//SearchData_" + searchIndex, currentSearch.rawJSON);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("Explosion: " + ex.Message + Environment.NewLine + ex.StackTrace + Environment.NewLine);
     }
     finally
     {
         driver.Close();
         Console.WriteLine("Tear down complete, strike [ENTER] to exit.");
     }
 }
예제 #28
0
        void proxyRun(Profile profile, C_Proxy proxy, int i, DataGridViewRowCollection rows)
        {
            var driverService = PhantomJSDriverService.CreateDefaultService();

            driverService.HideCommandPromptWindow = true;

            if (proxy.auth)
            {
                driverService.ProxyAuthentication = String.Format("{0}:{1}", proxy.username, proxy.password);
            }

            driverService.Proxy = proxy.address;
            //driverService.ProxyType = "http";

            rows[i].Cells[7].Value = "Setting up...";

            IWebDriver _driver;

            _driver = new PhantomJSDriver(driverService);
            _driver.Navigate().GoToUrl(profile.SplashUrl);

            if (ElementDisplayed(_driver, By.CssSelector(".message.message-1.hidden"), 60))
            {
                rows[i].Cells[7].Value = "On splash page...";

                while (_driver.FindElements(By.Id("captcha")).Count <= 0)
                {
                    System.Threading.Thread.Sleep(1000);
                }

                rows[i].Cells[7].Value = "Splash page passed!";
                rows[i].Cells[7].Style = new DataGridViewCellStyle {
                    ForeColor = System.Drawing.Color.Green
                };

                string cookie_name = _driver.Manage().Cookies.AllCookies.FirstOrDefault(s => s.Value.Contains("hmac")).Name;
                proxy.hmac             = _driver.Manage().Cookies.AllCookies.FirstOrDefault(s => s.Value.Contains("hmac")).Value;
                proxy.hmac_expiration  = _driver.Manage().Cookies.AllCookies.FirstOrDefault(s => s.Value.Contains("hmac")).Expiry;
                rows[i].Cells[3].Value = proxy.hmac;
                proxy.sitekey          = _driver.FindElement(By.Id("captcha")).GetAttribute("data-sitekey");
                rows[i].Cells[4].Value = proxy.sitekey;
                proxy.clientid         = _driver.FindElement(By.Id("flashproductform")).GetAttribute("action").Split(new string[] { "clientId=" }, StringSplitOptions.None)[1];
                rows[i].Cells[5].Value = proxy.clientid;
                proxy.duplicate        = getDuplicate(_driver.PageSource, _driver.FindElement(By.XPath("//link[@rel='canonical']")).GetAttribute("href"));
                rows[i].Cells[6].Value = proxy.duplicate;

                rows[i].Cells[7].Value = "HMAC and Sitekey retrieved!";
                foreach (OpenQA.Selenium.Cookie cookie in _driver.Manage().Cookies.AllCookies)
                {
                    if (cookie.Domain.Contains("adidas"))
                    {
                        proxy.cookies.Add(new C_Cookie {
                            name = cookie.Name, value = cookie.Value, domain = cookie.Domain, expiry = cookie.Expiry
                        });
                    }
                }

                passedSplash.Add(proxy);

                if (proxy.auth)
                {
                    File.AppendAllText("logs.txt", String.Format("Proxy --- Address : {0} --- Username: {1} --- Password: {2} / Cookie --- Name: {3} --- Value : {4} / Sitekey: {5} / Client ID : {6} / Duplicate : {7}", proxy.address, proxy.username, proxy.password, cookie_name, proxy.hmac, proxy.sitekey, proxy.clientid, proxy.duplicate) + Environment.NewLine);
                }
                else
                {
                    File.AppendAllText("logs.txt", String.Format("Proxy --- Address : {0} / Cookie --- Name: {1} --- Value : {2} / Sitekey: {3} / Client ID : {4} / Duplicate : {5}", proxy.address, cookie_name, proxy.hmac, proxy.sitekey, proxy.clientid, proxy.duplicate) + Environment.NewLine);
                }

                File.WriteAllText(String.Format("{0}\\{1}_productpage_source.txt", AppDomain.CurrentDomain.BaseDirectory, profile.ProductID), _driver.PageSource);
                _driver.Quit();
            }
            else
            {
                rows[i].Cells[7].Value = "Error!";
                rows[i].Cells[7].Style = new DataGridViewCellStyle {
                    ForeColor = System.Drawing.Color.Red
                };

                _driver.Quit();
            }
        }
예제 #29
0
        public void ChangePassword(Gmail gmail)
        {
            try
            {
                string changePassUrl = "https://myaccount.google.com/security/signinoptions/password";
                webDriver.Navigate().GoToUrl(changePassUrl);

                try
                {
                    var passInput = GetElement(webDriver, By.Id("Passwd"), 2);
                    passInput.Clear();
                    passInput.SendKeys(gmail.OldPass);
                    Thread.Sleep(500);
                    var signInBtn = GetElement(webDriver, By.Id("signIn"), 1);
                    signInBtn.Click();
                    Thread.Sleep(1000);
                }
                catch (Exception e)
                {
                    logger.InfoFormat("{0}, stacktrace: {1}", e.Message, e.StackTrace);
                }

                var passInputs = webDriver.FindElements(By.XPath("//input[@type='password']"));

                foreach (var passInput in passInputs)
                {
                    passInput.Clear();
                    passInput.SendKeys(gmail.NewPass);
                    Thread.Sleep(900);
                }

                //var divRole = webDriver.FindElement(By.XPath("//div[@role='button']"));
                //var spanBtn = divRole.FindElement(By.XPath(".//span"));
                var spanBtn = webDriver.FindElement(By.XPath("//div[@role='main']/div/div/div/div/div/content/span"));
                spanBtn.Click();

                Thread.Sleep(1500);
                //var divPass = webDriver.FindElement(By.XPath("//div[contains(text(), 'New password')]"));
                //var parent = divPass.FindElement(By.XPath(".."));
                //var pass1Input = parent.FindElement(By.XPath(".//input"));
                //pass1Input.Clear();
                //pass1Input.SendKeys(gmail.NewPass);
                //Thread.Sleep(900);


                //var divPass2 = webDriver.FindElement(By.XPath("//div[contains(text(), 'Confirm new password')]"));
                //var parent2 = divPass2.FindElement(By.XPath(".."));
                //var pass2Input = parent2.FindElement(By.XPath(".//input"));
                //pass2Input.Clear();
                //pass2Input.SendKeys(gmail.NewPass);
                //Thread.Sleep(900);

                //var changeBtn = webDriver.FindElement(By.XPath("//span[contains(text(), 'Change password')]"));
                //changeBtn.Click();
                //Thread.Sleep(600);
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("ID: " + gmail.ID + ", {0}, stacktrace: {1}", ex.Message, ex.StackTrace);
                File.AppendAllLines(Directory.GetCurrentDirectory() + "\\error_accounts.txt", new string[] { gmail.ID });
            }
        }
예제 #30
0
        public List <MyPlaylist> GetMyPlaylist()
        {
            List <MyPlaylist> myplaylists = new List <MyPlaylist>();
            MyPlaylist        playlist1   = new MyPlaylist();


            var service = PhantomJSDriverService.CreateDefaultService();

            service.HideCommandPromptWindow = true;
            IWebDriver driver = new PhantomJSDriver(service);

            driver.Url = "http://www.playzer.fr/customer/login";
            IJavaScriptExecutor js = (IJavaScriptExecutor)driver;

            driver.FindElement(By.Id("customer_login_login")).SendKeys(Email);
            driver.FindElement(By.Id("customer_login_password")).SendKeys(Pass);
            IWebElement btn = driver.FindElements(By.XPath(".//button[@onclick]"))[1];

            js.ExecuteScript("arguments[0].click();", btn);



            // driver.Manage().Cookies.AddCookie(GetCookies());


            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
            IWebElement nav_menu = driver.FindElement(By.Id("nav_menu"));

            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

            js.ExecuteScript("arguments[0].click();", nav_menu);
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));


            js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='nav_menu']/ul")));
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

            js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='nav_menu']/ul/div[1]")));
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

            js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='nav_menu']/ul/div[1]/div[2]")));
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

            js.ExecuteScript("arguments[0].click();", driver.FindElement(By.Id("menu_myplaylists")));
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));



            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

            IReadOnlyCollection <IWebElement> all_playlist = driver.FindElements(By.XPath("//div[@class='content home_playlist transition']"));

            Thread.Sleep(TimeSpan.FromSeconds(2));


            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
            int i = 1;

            foreach (IWebElement playlist in all_playlist)
            {
                string id = playlist.GetAttribute("id");
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                IWebElement playlist_option_btn = driver.FindElement(By.XPath("//*[@id='" + id + "_options" + "']"));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                js.ExecuteScript("arguments[0].click();", playlist_option_btn);
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                IWebElement edit_btn = driver.FindElement(By.XPath("//div[@class='edit transition']"));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                js.ExecuteScript("arguments[0].click();", edit_btn);
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));

                IWebElement song_items = driver.FindElement(By.XPath("//ul[@id='playlist_items']"));

                //Thread.Sleep(TimeSpan.FromSeconds(2));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                IReadOnlyCollection <IWebElement> songs = song_items.FindElements(By.ClassName("content"));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));

                playlist1            = new MyPlaylist();
                playlist1.Title      = driver.FindElement(By.XPath("//*[@id='playlist_edit_name']")).GetAttribute("value");
                playlist1.SelectedId = i;

                foreach (IWebElement song in songs)
                {
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                    string id_song = song.GetAttribute("id");
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                    string title = driver.FindElement(By.XPath("//*[@id='" + id_song + "']/div[4]")).Text;
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                    string artist = driver.FindElement(By.XPath("//*[@id='" + id_song + "']/div[5]")).Text;
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                    string url = driver.FindElement(By.XPath("//*[@id='" + id_song + "']/div[3]/img")).GetAttribute("src");
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                    Song track = new Song(title, artist, id_song, url, i);
                    playlist1.Songs.Add(track);
                    playlist1.NumOfSongs = songs.Count;
                    playlist1.Url        = url;
                }
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                myplaylists.Add(playlist1);

                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                js.ExecuteScript("arguments[0].click();", driver.FindElement(By.Id("close_modify")));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

                js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='playlist_options']/div[1]/img")));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                i++;
            }
            driver.Close();
            driver.Dispose();
            driver.Quit();


            PlaylistDetailsWindow.all_playlists = myplaylists;
            myPlaylist = myplaylists;
            return(myplaylists);
        }