Advertisement
Guest User

Untitled

a guest
Sep 4th, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.65 KB | None | 0 0
  1. using OpenQA.Selenium;
  2. using OpenQA.Selenium.Chrome;
  3. using OpenQA.Selenium.Firefox;
  4. using OpenQA.Selenium.PhantomJS;
  5. using OpenQA.Selenium.Safari;
  6. using System;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Text.RegularExpressions;
  13. using System.Threading.Tasks;
  14. namespace Twitter_Follower_Scraper
  15. {
  16. class Program
  17. {
  18. private static string user = "razvanvasiliu@hotmail.com";
  19. private static string pass = "parolamea";
  20. private static string userLink = "https://twitter.com/om_officiel";
  21. //private static string userLink = "https://twitter.com/arayphotodesign";
  22.  
  23. private static ArrayList followerList = new ArrayList();
  24. private static StreamWriter streamWriter;
  25.  
  26. private static int step = 0;
  27. static void Main(string[] args)
  28. {
  29. try {
  30. streamWriter = new StreamWriter("followers.csv");
  31. }
  32. catch(IOException e)
  33. {
  34. Console.WriteLine(e.Message);
  35. }
  36. /*
  37. var options = new ChromeOptions();
  38. var service = ChromeDriverService.CreateDefaultService();
  39. options.AddUserProfilePreference("profile.managed_default_content_settings.images", 2);
  40.  
  41. IWebDriver webDriver = new ChromeDriver(service, options);
  42. */
  43. try {/*
  44. FirefoxBinary firefoxbin = new FirefoxBinary("C:/Program Files (x86)/Mozilla Firefox/firefox.exe");
  45. IWebDriver webDriver = new FirefoxDriver(firefoxbin, null);
  46. */
  47. IWebDriver webDriver = new SafariDriver();
  48. twitterLogin(webDriver);
  49.  
  50. webDriver.Close();
  51. }
  52. catch(NullReferenceException e)
  53. {
  54. Console.WriteLine(e.Message);
  55. Console.ReadLine();
  56. }
  57. streamWriter.Close();
  58. }
  59. public static string RemoveChars(string key)
  60. {
  61. return Regex.Replace(key, "[^\\d]", "");
  62. }
  63. public static void RemoveElement(IWebDriver webDriver)
  64. {
  65. //((IJavaScriptExecutor)webDriver).ExecuteScript("var elements = document.getElementsByClassName('js-stream-item');while(elements.length > 0){elements[0].parentNode.removeChild(elements[0]);}");
  66. ((IJavaScriptExecutor)webDriver).ExecuteScript("var elements = document.getElementsByClassName('GridTimeline-items')[0].getElementsByClassName('Grid Grid--withGutter');while(elements.length > 0){elements[0].parentNode.removeChild(elements[0]);}");
  67.  
  68. ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollBy(0,document.body.scrollHeight)", "");
  69. ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollBy(0,-document.body.scrollHeight)", "");
  70. ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollBy(0,document.body.scrollHeight)", "");
  71. ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollBy(0,-document.body.scrollHeight)", "");
  72. }
  73. private static void twitterLogin(IWebDriver webDriver)
  74. {
  75. webDriver.Navigate().GoToUrl("http://www.twitter.com/login");
  76. IWebElement userInput = webDriver.FindElement(By.CssSelector(".js-username-field.email-input.js-initial-focus"));
  77. IWebElement passwordInput = webDriver.FindElement(By.ClassName("js-password-field"));
  78.  
  79. userInput.SendKeys(user);
  80. webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1));
  81.  
  82. passwordInput.SendKeys(pass);
  83. webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1));
  84.  
  85. passwordInput.Submit();
  86.  
  87. webDriver.Navigate().GoToUrl(userLink);
  88.  
  89. IWebElement followersLink = webDriver.FindElement(By.CssSelector(".ProfileNav-item.ProfileNav-item--followers")).FindElement(By.TagName("a"));
  90. followersLink.Click();
  91.  
  92. webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
  93. IWebElement followersNumberElement = webDriver.FindElement(By.CssSelector(".ProfileNav-item.ProfileNav-item--followers.is-active")).FindElement(By.TagName("a"));
  94.  
  95. Console.WriteLine(RemoveChars(followersNumberElement.GetAttribute("title")).Replace(".", ""));
  96. int followersNumber = Int32.Parse(RemoveChars(followersNumberElement.GetAttribute("title")).Replace(".", ""));
  97. if (followersNumberElement != null)
  98. Console.WriteLine("Followers number: " + followersNumber);
  99. else
  100. Console.WriteLine("No such element.");
  101. int written = 0;
  102. while (written < followersNumber)
  103. {
  104. IList<IWebElement> loadedFollowers = webDriver.FindElements(By.CssSelector(".ProfileCard-screennameLink.u-linkComplex.js-nav"));
  105. foreach (IWebElement element in loadedFollowers)
  106. {
  107. written++;
  108. string followerStr = element.GetAttribute("textContent").Replace(" ", "").Replace("\n", "").Replace("\r", "");
  109. streamWriter.Write(followerStr + ",\n");
  110. }
  111.  
  112. webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
  113. ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollTo(0, document.body.scrollHeight)");
  114.  
  115. Console.WriteLine("> Followers loaded on page: " + webDriver.FindElements(By.CssSelector(".ProfileCard-screennameLink.u-linkComplex.js-nav")).Count + " ( " + (float)(100.0f* webDriver.FindElements(By.CssSelector(".ProfileCard-screennameLink.u-linkComplex.js-nav")).Count)/followersNumber + "% ) ");
  116. Console.WriteLine("> Followers EXTRACTED: " + written + " ( " + (float)(100.0f * written) / followersNumber + "% ) ");
  117. RemoveElement(webDriver);
  118. }
  119. Console.WriteLine("Finished");
  120.  
  121. /*
  122. bool ok = false;
  123. while(true)
  124. {
  125. webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
  126. IList<IWebElement> loadedFollowers = webDriver.FindElements(By.CssSelector(".ProfileCard-screennameLink.u-linkComplex.js-nav"));
  127. Console.WriteLine("Number of followers loadad: " + followerList.Count);
  128. for(int e = 0; e < loadedFollowers.Count; e++)
  129. {
  130. IWebElement element = loadedFollowers[e];
  131. if (element.GetAttribute("textContent") != null && !element.GetAttribute("textContent").Equals(""))
  132. {
  133. string followerStr = element.GetAttribute("textContent").Replace(" ", "").Replace("\n", "");
  134. if (!followerList.Contains(followerStr))
  135. {
  136. //Console.WriteLine(followerStr);
  137. followerList.Add(followerStr);
  138. streamWriter.Write(followerStr.Replace("\r", "") + ",\n");
  139. }
  140. }
  141. }
  142. IJavaScriptExecutor js = (IJavaScriptExecutor)webDriver;
  143. js.ExecuteScript("window.scrollTo(0, document.body.scrollHeight);");
  144. if ((step != 0 && followerList.Count > loadedFollowers.Count) && ok)
  145. step += loadedFollowers.Count - followerList.Count;
  146. else
  147. ok = true;
  148. }
  149. */
  150. }
  151.  
  152. }
  153.  
  154. internal interface IWebElements
  155. {
  156. }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement