/// <summary>
 /// 高级爬虫
 /// </summary>
 /// <param name="uri">抓取地址URL</param>
 /// <param name="script">要执行的Javascript脚本代码</param>
 /// <param name="operation">要执行的页面操作</param>
 /// <returns></returns>
 public async Task Start(Uri uri, Script script, Operation operation)
 {
     await Task.Run(() =>
     {
         if (OnStart != null)
         {
             this.OnStart(this, new OnStartEventArgs(uri));
         }
         var driver = new PhantomJSDriver(_service, _options);//实例化PhantomJS的WebDriver
         try
         {
             var watch = DateTime.Now;
             driver.Navigate().GoToUrl(uri.ToString());//请求URL地址
             if (script != null)
             {
                 driver.ExecuteScript(script.Code, script.Args);                //执行Javascript代码
             }
             if (operation != null && operation.Action != null)
             {
                 operation.Action.Invoke(driver);
             }
             var driverWait = new WebDriverWait(driver, new TimeSpan(2000));//设置超时时间为x毫秒
             if (operation != null && operation.Condition != null)
             {
                 driverWait.Until(operation.Condition);
             }
             var threadId     = System.Threading.Thread.CurrentThread.ManagedThreadId; //获取当前任务线程ID
             var milliseconds = DateTime.Now.Subtract(watch).Milliseconds;             //获取请求执行时间;
             var pageSource   = driver.PageSource;                                     //获取网页Dom结构
             this.OnCompleted?.Invoke(this, new OnCompletedEventArgs(uri, threadId, milliseconds, pageSource, driver));
         }
         catch (Exception ex)
         {
             this.OnError?.Invoke(this, new OnErrorEventArgs(uri, ex));
         }
         finally
         {
             driver.Close();
             driver.Quit();
         }
     });
 }
示例#2
0
        private List <EmployeeInformation> GetEmployeeInformation(int employeeId)
        {
            var        baseUrl = $"xxx";
            var        client  = new RestClient(baseUrl);
            var        request = new RestRequest(Method.GET);
            IWebDriver driver  = new PhantomJSDriver();
            // IWebDriver x = new PhantomJSDriver();
            var cookieJar = GetCookie(driver);

            foreach (var cookie in cookieJar.AllCookies)
            {
                request.AddParameter(cookie.Name, cookie.Value, ParameterType.Cookie);
            }
            var test = client.Execute(request);
            var a    = JsonConvert.DeserializeObject(test.Content);
            var employeeInformations = JsonConvert.DeserializeObject <List <EmployeeInformation> >(a.ToString());

            driver.Close();
            return(employeeInformations);
        }
示例#3
0
        private void button_Click(object sender, RoutedEventArgs e)
        {
            var driverService = PhantomJSDriverService.CreateDefaultService();

            driverService.HideCommandPromptWindow = true;

            var webDriver = new PhantomJSDriver(driverService);

            webDriver.Navigate().GoToUrl("http://www.udebug.com/UVa/10812");
            IWebElement inputBox = webDriver.FindElement(By.Id("edit-input-data"));

            inputBox.SendKeys("3\n2035415231 1462621774\n1545574401 1640829072\n2057229440 1467906174");
            IWebElement submitButton = webDriver.FindElement(By.Id("edit-output"));

            submitButton.Click();
            string answer = webDriver.PageSource;
            int    begin  = answer.IndexOf("<pre>") + 5;

            answer = answer.Substring(begin, answer.IndexOf("</pre>") - begin);
            webDriver.Close();
            MessageBox.Show(answer);
        }
        private ResponseResult GetPrerenderedPageResponse(HttpRequest request)
        {
            IWebDriver driver = null;

            try
            {
                var driverService = PhantomJSDriverService.CreateDefaultService();
                driverService.HideCommandPromptWindow = true;

                driver = new PhantomJSDriver(driverService);

                driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(60));
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(60);
                driver.Manage().Timeouts().PageLoad     = TimeSpan.FromSeconds(60);
                driver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromSeconds(60));

                string url = request.Url.AbsoluteUri;

                driver.Navigate().GoToUrl(url);

                Thread.Sleep(3000);

                //var reader = new StreamReader(driver.PageSource, Encoding.UTF8);
                return(new ResponseResult(HttpStatusCode.OK, driver.PageSource.ToString(), new WebHeaderCollection()));
            }
            catch (Exception exception)
            {
                return(new ResponseResult(HttpStatusCode.BadRequest, "", new WebHeaderCollection()));
            }
            finally
            {
                if (driver != null)
                {
                    driver.Quit();
                    driver.Close();
                }
            }
        }
示例#5
0
 /// <summary>
 /// 启动爬虫进程
 /// </summary>
 /// <param name="uri">uri</param>
 /// <returns>任务</returns>
 public async Task Start(Uri uri)
 {
     await Task.Run(() =>
     {
         if (OnStart != null)
         {
             this.OnStart(this, new OnStartEventArgs(uri));
         }
         var driver = new PhantomJSDriver(service, options);//实例化PhantomJS的WebDriver
         try
         {
             var watch = DateTime.Now;
             driver.Navigate().GoToUrl(uri.ToString());
             // if(script != null)driver.ExecuteScript(script.Code,script.Args)    //执行JavaScript代码
             var driverWait   = new WebDriverWait(driver, TimeSpan.FromMilliseconds(10000));
             var threadId     = Thread.CurrentThread.ManagedThreadId;//当前线程ID
             var milliseconds = DateTime.Now.Subtract(watch).Milliseconds;
             var pageSource   = driver.PageSource;
             if (this.OnCompleted != null)
             {
                 this.OnCompleted(this, new OnCompletedEventArgs(uri, threadId, pageSource, milliseconds));
             }
         }
         catch (Exception ex)
         {
             if (this.OnError != null)
             {
                 this.OnError(this, new OnErrorEventArgs(uri, ex));
             }
         }
         finally
         {
             driver.Close();
             driver.Quit();
         }
     });
 }
示例#6
0
        public void GoogleTest1()
        {
            //var nodeUrl = "http://192.168.99.1:4444/";
            //ChromeOptions options = new ChromeOptions();
            //var Driver = new RemoteWebDriver(new Uri(nodeUrl), options);
            //var Driver = new ChromeDriver();
            var Driver = new PhantomJSDriver();

            Driver.Manage().Window.Maximize();
            Driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(15);
            Driver.Navigate().GoToUrl("https://www.google.com/");
            for (int i = 0; i < 20; i++)
            {
                Driver.Navigate().Refresh();
                Thread.Sleep(2000);
            }
            Driver.Close();
            Driver.Quit();
            //while (true)
            //{
            //    Driver.Navigate().Refresh();
            //    Thread.Sleep(2000);
            //}
        }
示例#7
0
        static void Main(string[] args)
        {
            IWebDriver driver;
            var        driverService = PhantomJSDriverService.CreateDefaultService();

            driverService.HideCommandPromptWindow = true;
            driver = new PhantomJSDriver(driverService);

            var collection = Enumerable.Range(0, 1338);

            foreach (var item in collection)
            {
                driver.Url = "http://collabedit.com/new"; driver.Navigate();
                string page = driver.Url.Split('/').Last();
                File.AppendAllText("Collabedit.txt", page + Environment.NewLine);
                driver.Url = "www.bing.com"; driver.Navigate();
            }
            driver.Close();

            var lines = File.ReadAllLines("Collabedit.txt");

            Array.Sort(lines);
            File.WriteAllLines("Collabedit.txt", lines);
        }
示例#8
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);
            }
        }
示例#9
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);
            }
        }
示例#10
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.");
     }
 }
示例#11
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);
        }
示例#12
0
 public void Close()
 {
     _webDriver.Close();
 }
        private async void createBtn_Click(object sender, RoutedEventArgs e)
        {
            Cursor = Cursors.Wait;
            List <Song>       search_results = new List <Song>();
            List <MyPlaylist> myPL           = new List <MyPlaylist>();
            IReadOnlyCollection <IWebElement> search_content;
            List <string>     search_content_ids = new List <string>();
            MyPlaylist        pl  = new MyPlaylist();
            List <MyPlaylist> lmp = new List <MyPlaylist>();

            if (string.IsNullOrEmpty(titleTextbox.Text.Trim()))
            {
                MessageBox.Show("Title can not be blank", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }


            createBtn.IsEnabled = false;
            if (MusicId != 0)
            {
                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));

                driver.Manage().Window.Maximize();
                js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='panel_search']/img")));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                Thread.Sleep(TimeSpan.FromSeconds(5));
                driver.FindElement(By.Id("search_engine")).SendKeys(MainWindow.sb);
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                Thread.Sleep(TimeSpan.FromSeconds(5));
                js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='search_clips_tab']")));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                // Thread.Sleep(TimeSpan.FromSeconds(2));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                IWebElement result = driver.FindElement(By.Id("search_results"));
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));


                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 == MusicId)
                    {
                        js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='" + song_id + "']")));

                        js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='panel_history']")));
                        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"));


                        break;
                    }
                    i++;
                }

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

                driver.FindElement(By.XPath("//*[@id='new_playlist']")).SendKeys(titleTextbox.Text);
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                Thread.Sleep(TimeSpan.FromSeconds(2));

                js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='new_playlist_button']")));
                Cursor = Cursors.Arrow;

                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();

                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']"));
                    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;
                    }

                    myPL = LoadPlaylist();
                    myPL.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));
                    break;
                }

                SaveToFile(myPL);

                MessageBox.Show("Song was added to created playlist", "Info", MessageBoxButton.OK, MessageBoxImage.Information);
                MainWindow.changed = true;
                // MainWindow.allPL = myPL;
                driver.Close();
                driver.Quit();
            }

            createBtn.IsEnabled = true;
            DialogResult        = true;
            this.Close();
        }