public async Task <string> GetFollowing(string profile, int position, bool enterProfile = true, bool openDialog = true) { if (enterProfile) { Enter(profile); } var followingsCount = GetFollowingsCount(profile); if (position > followingsCount) { return(null); } if (openDialog) { driver.Exec(driver.FindElement(By.XPath("//a[contains(@href,'/following/')]"), 60).Click, successWhen: () => driver.Url.Contains("/following")); } var liElements = driver.FindElements(By.CssSelector("ul > div:first-of-type > li span > a.notranslate"), 30); var users = liElements.Select(x => x.Text).ToHashSet(); Actions actions = new Actions(driver); while (position > users.Count()) { liElements = driver.FindElements(By.CssSelector("ul > div:first-of-type > li span > a.notranslate"), 60); await ScrollDown.ScrollInto(driver, liElements.Last()); foreach (var user in getUsers()) { users.Add(user); } } return(users.ElementAt(position - 1)); }
public async IAsyncEnumerable <string> GetAllFollowings(string profile, bool enterProfile = true, bool openDialog = true) { if (enterProfile) { Enter(profile); } var followingsCount = GetFollowingsCount(profile); if (openDialog) { driver.Exec(driver.FindElement(By.XPath("//a[contains(@href,'/following/')]"), 60).Click, successWhen: () => driver.Url.Contains("/following")); } var users = new HashSet <string>(); var lastTimeFoundNewUser = DateTime.Now; while (users.Count < followingsCount) { if ((DateTime.Now - lastTimeFoundNewUser).Seconds >= 60) { yield break; } foreach (var user in getUsers()) { if (users.Add(user)) { lastTimeFoundNewUser = DateTime.Now; yield return(user); } } var liElements = driver.FindElements(By.CssSelector("ul > div:first-of-type > li span > a.notranslate"), 60); await ScrollDown.ScrollInto(driver, liElements.Last()); } }