pmadhu3633

Hashtags

Sep 8th, 2021
618
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.20 KB | None | 0 0
  1. from selenium import webdriver
  2. import time
  3. from selenium.webdriver.common.action_chains import ActionChains
  4. from selenium.webdriver.support.ui import WebDriverWait
  5. from selenium.webdriver.common.keys import Keys
  6. from selenium.webdriver.common.by import By
  7. from selenium.webdriver.support import expected_conditions as EC
  8. import datetime
  9.  
  10.  
  11. def close_up(driver, actions,wait):
  12.     time.sleep(1)
  13.     actions.move_to_element(wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class,'modal-popup')]//button[@class='close']/span"))))
  14.     button = driver.find_element_by_xpath("//div[contains(@class,'modal-popup')]//button[@class='close']/span")
  15.     driver.execute_script("arguments[0].click();", button)
  16.     time.sleep(1)
  17.  
  18.  
  19. def check_model_winodows(driver, actions,wait):
  20.     try:
  21.         if len(driver.find_elements(By.XPATH, "//div[contains(@class,'modal-popup')]//button[@class='close']/span")) > 0:
  22.             # print("Pop up is visible")
  23.             close_up(driver, actions,wait)
  24.         else:
  25.             print("")
  26.     except:
  27.         # print("Something went wrong")
  28.         pass
  29.     return driver, actions
  30.  
  31. def main(hashtag):
  32.     options = webdriver.ChromeOptions()
  33.     options.add_argument("--disable-infobars")
  34.     options.add_argument("--disable-notifications")
  35.     options.add_argument("--start-maximized")
  36.     options.add_argument("--disable-extensions")
  37.     options.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 2})
  38.     options.add_argument('--window-size=1920,1080')
  39.     options.add_experimental_option("prefs", {"profile.default_content_settings.cookies": 2})
  40.  
  41.     driver = webdriver.Chrome(executable_path='C:\expediaproject\Chromedriver\chromedriver.exe', options=options)
  42.     # driver = webdriver.Chrome(driver_path)
  43.     driver.maximize_window()
  44.     driver.implicitly_wait(50)
  45.     driver.get("https://www.trackmyhashtag.com/")
  46.     wait = WebDriverWait(driver, 10)
  47.  
  48.     actions = ActionChains(driver)
  49.     wait.until(EC.visibility_of_element_located((By.ID, "search_keyword"))).send_keys(hashtag, Keys.RETURN)
  50.  
  51.     check_model_winodows(driver, actions,wait)
  52.     wait = WebDriverWait(driver, 10)
  53.     time.sleep(3)
  54.     button = driver.find_element_by_css_selector("a[onclick*='preview-tweets']")
  55.     driver.execute_script("arguments[0].click();", button)
  56.     # wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[onclick*='preview-tweets']"))).click()
  57.     check_model_winodows(driver, actions,wait)
  58.     total_number_of_tweet_row = len(driver.find_elements(By.XPATH, "//tbody/tr"))
  59.     # print(total_number_of_tweet_row)
  60.     rank = 1
  61.     page_number = 2
  62.     total_number_of_pages = 5
  63.     myhashtag = {}
  64.     for a, idx in enumerate(range(total_number_of_pages)):
  65.         print("idx>>>>", idx)
  66.         j = 0
  67.         check_model_winodows(driver, actions, wait)
  68.         for i in range(total_number_of_tweet_row):
  69.             #check_model_winodows(driver, actions,wait)
  70.             elems = driver.find_elements(By.XPATH, "//tbody/tr")
  71.             time.sleep(1)
  72.             # final_ele = elems[j].find_element_by_xpath(".//td[2]")
  73.             # print("code worked till here")
  74.             driver.execute_script("arguments[0].scrollIntoView(true);",elems[j])
  75.             name = elems[j].find_element_by_xpath(".//div[@class='tweet-name']").text
  76.             print("name>", name)
  77.             myhashtag['user_name'] = name
  78.  
  79.             userid = elems[j].find_element_by_tag_name("td").text
  80.             userid = userid.partition('@')[2]
  81.             userid = '@' + userid
  82.             print("userid>", userid)
  83.             myhashtag['user_screen_name'] = userid
  84.  
  85.             content = elems[j].find_element_by_xpath(".//td[2]").text
  86.             print("content", content)
  87.             myhashtag['content'] = content
  88.  
  89.             # date = elems[j].find_element_by_xpath(".//td[3]").text
  90.             # print("1>>>>", date)
  91.             # date = str(date).replace("\n", " ")
  92.             # print("2>>>", date)
  93.             # date = datetime.strptime(date, '%d %b %Y %H:%M:%S %p')
  94.             # print("3>>>", date)
  95.             # date = date.strftime('%Y-%m-%dT%H:%M:%SZ')
  96.             # print("date", date)
  97.             # myhashtag['articleDate'] = date
  98.  
  99.             engm = elems[j].find_element_by_xpath(".//td[4]").text
  100.             print("engagement", engm)
  101.             myhashtag['engagement'] = engm
  102.  
  103.             impressions = elems[j].find_element_by_xpath(".//td[6]").text
  104.             print("impressions", impressions)
  105.             myhashtag['impressions'] = impressions
  106.  
  107.             myhashtag['rank'] = rank
  108.             rank = rank + 1
  109.             j = j + 1
  110.  
  111.             print(myhashtag)
  112.  
  113.         check_model_winodows(driver, actions,wait)
  114.         driver.execute_script(
  115.             "var scrollingElement = (document.scrollingElement || document.body);scrollingElement.scrollTop = "
  116.             "scrollingElement.scrollHeight;")
  117.         wait.until(EC.element_to_be_clickable((By.XPATH, f"//a[text()='{page_number}']"))).click()
  118.         page_number = page_number + 1
  119.         print("Page numberrrr", page_number)
  120.         if page_number == 7:
  121.             break
  122.     driver.quit()
  123.     return driver, actions
  124.  
  125. if __name__ == '__main__':
  126.     main('India')
Advertisement
Add Comment
Please, Sign In to add comment