/// <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(); } }); }
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); }
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(); } } }
/// <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(); } }); }
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); //} }
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); }
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); } }
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); } }
/// <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."); } }
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); }
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(); }