Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.57 KB | None | 0 0
  1. from selenium import webdriver
  2. from selenium.webdriver.common.keys import Keys
  3. from selenium.common.exceptions import TimeoutException, NoSuchElementException
  4. from selenium.webdriver.support.ui import WebDriverWait
  5. from selenium.webdriver.support import expected_conditions as EC
  6. from selenium.webdriver.common.by import By
  7. import time, csv
  8. import random
  9. import string
  10. from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
  11. from selenium.webdriver.common.action_chains import ActionChains
  12. import codecs
  13. import pyperclip
  14. from pathlib import Path
  15. import os
  16. from email.mime.multipart import MIMEMultipart
  17. from email.mime.text import MIMEText
  18. import smtplib
  19. import imapclient, csv
  20. import time
  21. import random
  22. from selenium import webdriver
  23. import pyzmail
  24. import json
  25. import ssl
  26.  
  27.  
  28. DEFAULT_TIMEOUT = 300
  29.  
  30.  
  31.  
  32. def fetch_new_message_button(driver):
  33. try:
  34. search_key = "//i[@data-icon-name='Add']"
  35. element_not_visible = EC.invisibility_of_element((By.ID, "loadingContainer"))
  36. WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_not_visible)
  37. #print('Container not visible!')
  38. element_present = EC.presence_of_element_located((By.XPATH, search_key))
  39. WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_present)
  40. #print('add icon located!')
  41. element_clickable = EC.element_to_be_clickable((By.XPATH, search_key))
  42. my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_clickable)
  43. #print('add icon clickable!')
  44. return my_element
  45. except TimeoutException:
  46. print ("timeout except new message btn")
  47. return None
  48.  
  49.  
  50. def fetch_to_input(driver):
  51. try:
  52. search_key = "//input[contains(@class,'ms-BasePicker-input pickerInput')]"
  53. element_located = EC.presence_of_all_elements_located((By.XPATH,search_key))
  54. WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
  55. element_visible = EC.visibility_of_all_elements_located((By.XPATH,search_key))
  56. my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
  57. return my_element[0]
  58. except TimeoutException:
  59. return None
  60.  
  61. def fetch_send_button(driver):
  62. try:
  63. search_key = "//span[(contains(.,'Send') or contains(.,'Envoyer')) and contains(@class,'ms-Button-label labe')]"
  64. element_located = EC.presence_of_element_located((By.XPATH,search_key))
  65. WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
  66. element_visible = EC.element_to_be_clickable((By.XPATH,search_key))
  67. my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
  68. return my_element
  69. except TimeoutException:
  70. return None
  71.  
  72. def fetch_subject_input(driver):
  73. try:
  74. search_key = "//input[contains(@id,'subjectLine')]"
  75. element_located = EC.presence_of_all_elements_located((By.XPATH,search_key))
  76. WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
  77. element_visible = EC.visibility_of_all_elements_located((By.XPATH,search_key))
  78. my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
  79. return my_element[0]
  80. except TimeoutException:
  81. return None
  82.  
  83.  
  84. def fetch_message_input(driver):
  85. try:
  86. search_key = "//div[@aria-label = 'Corps du message' or @aria-label = 'Message body']"
  87. element_located = EC.presence_of_element_located((By.XPATH,search_key))
  88. WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
  89. element_visible = EC.element_to_be_clickable((By.XPATH,search_key))
  90. my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
  91. return my_element
  92. except TimeoutException:
  93. return None
  94.  
  95.  
  96. def fetch_cci_input(driver):
  97. try:
  98. search_key = "//input[contains(@class,'ms-BasePicker-input pickerInput')]"
  99. element_located = EC.presence_of_all_elements_located((By.XPATH,search_key))
  100. WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
  101. element_visible = EC.visibility_of_all_elements_located((By.XPATH,search_key))
  102. my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
  103. return my_element[1]
  104. except TimeoutException:
  105. return None
  106.  
  107.  
  108.  
  109. def fetch_cci_button(driver):
  110. try:
  111. #print('started')
  112. search_key = "//span[(contains(.,'Cci') or contains(.,'Bcc')) and contains(@class,'ms-Button-label label-')]"
  113. element_present = EC.presence_of_element_located((By.XPATH, search_key))
  114. WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_present)
  115. element_clickable = EC.element_to_be_clickable((By.XPATH, search_key))
  116. my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_clickable)
  117. return my_element
  118. except TimeoutException:
  119. print ("timeout except")
  120. return None
  121.  
  122. def fetch_passwd_input(driver):
  123. try:
  124. #print('started')
  125. search_key = "//input[@name='passwd']"
  126. element_present = EC.presence_of_element_located((By.XPATH, search_key))
  127. WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_present)
  128. element_clickable = EC.element_to_be_clickable((By.XPATH, search_key))
  129. my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_clickable)
  130. return my_element
  131. except TimeoutException:
  132. print ("timeout except")
  133. return None
  134.  
  135.  
  136. def randomString(stringLength=4):
  137. """Generate a random string of fixed length """
  138. letters = string.ascii_lowercase
  139. return ''.join(random.choice(letters) for i in range(stringLength))
  140.  
  141. config_path = Path.cwd()/'config.json'
  142. with open(config_path) as f:
  143. config = json.load(f)
  144. #print(config['from_emails_path'])
  145.  
  146.  
  147. s_start = 0
  148. s_end = 395
  149.  
  150.  
  151. data_path = Path.cwd()/config['list_path']
  152. source = open(data_path)
  153.  
  154.  
  155.  
  156.  
  157. from_emails_path = Path.cwd()/config['from_emails_path']
  158.  
  159.  
  160. with open(from_emails_path, 'r') as f:
  161. reader = csv.reader(f)
  162. emails = list(reader)
  163.  
  164.  
  165. i = 0
  166. d_start = 0
  167. d_end = 10000
  168.  
  169. source.seek(0)
  170. data = ''.join([ str(line[:-1])+";" for line in source.readlines()[d_start:d_end] ])
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177. def launch(s_start, s_end,d_start,d_end ):
  178. for email in emails:
  179.  
  180. caps = DesiredCapabilities().FIREFOX
  181. exec_path = Path.cwd()/"geckodriver"
  182. driver = webdriver.Firefox(capabilities=caps, executable_path = str(exec_path))
  183.  
  184.  
  185.  
  186. driver.get("https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=13&ct=1567898392&rver=7.0.6737.0&wp=MBI_SSL&wreply=https%3a%2f%2foutlook.live.com%2fowa%2f%3fnlp%3d1%26RpsCsrfState%3d815d5c12-146b-4097-05da-361743d8de35&id=292841&aadredir=1&CBCXT=out&lw=1&fl=dob%2cflname%2cwld&cobrandid=90015")
  187.  
  188. elem = driver.find_element_by_name("loginfmt")
  189. elem.send_keys(email[0])
  190. next_button = driver.find_element_by_id("idSIButton9")
  191. next_button.send_keys(Keys.ENTER);
  192.  
  193.  
  194. timeout = 300
  195. account_locked = False
  196. try:
  197.  
  198. element_present = EC.element_to_be_clickable((By.XPATH, "//div[contains(@id,'msaTile')]"))
  199. WebDriverWait(driver, timeout).until(element_present)
  200. account_locked = True
  201. except TimeoutException:
  202. account_locked = False
  203. print(account_locked)
  204. if(account_locked):
  205. skip_button = driver.find_element_by_xpath("//div[contains(@id,'msaTile')]")
  206. skip_button.send_keys(Keys.ENTER);
  207.  
  208. print (email[1])
  209. passwd_input = fetch_passwd_input(driver)
  210. print (passwd_input)
  211. if passwd_input != None:
  212. passwd_input.send_keys(email[1])
  213.  
  214.  
  215. time.sleep(0.5)
  216. next_button = driver.find_element_by_id("idSIButton9")
  217. next_button.send_keys(Keys.ENTER);
  218.  
  219.  
  220. for _ in range(5):
  221. driver.switch_to.window(driver.window_handles[0])
  222. source.seek(0)
  223. data = ''.join([ str(line[:-1])+";" for line in source.readlines()[s_start:s_end] ])
  224.  
  225.  
  226.  
  227.  
  228. new_message_btn = fetch_new_message_button(driver)
  229. if new_message_btn != None:
  230. new_message_btn.click()
  231.  
  232.  
  233. cci_btn = fetch_cci_button(driver)
  234. if cci_btn != None:
  235. cci_btn.click()
  236.  
  237. to_input = fetch_to_input(driver)
  238. if to_input != None:
  239. to_input.send_keys(config['to_email'])
  240.  
  241.  
  242.  
  243. cci_input = fetch_cci_input(driver)
  244. if cci_input != None:
  245. pyperclip.copy(data)
  246. cci_input.send_keys(Keys.CONTROL, "v")
  247. cci_input.send_keys(Keys.COMMAND, "v")
  248. cci_input.send_keys(";")
  249. cci_input.send_keys(config['test_email'])
  250.  
  251.  
  252.  
  253. subject_input = fetch_subject_input(driver)
  254. #print('11')
  255. if subject_input != None:
  256. #print('22')
  257. subject_input.send_keys(config['subject'])
  258.  
  259.  
  260.  
  261. letter_path = Path.cwd()/config['letter_path']
  262. URL = letter_path.as_uri()
  263. js = '''window.open('https://www.google.com');'''
  264. driver.execute_script(js)
  265. driver.switch_to.window(driver.window_handles[1])
  266. driver.get(letter_path.as_uri())
  267.  
  268. driver.find_element_by_tag_name("body").send_keys(Keys.COMMAND, "a")
  269. driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL, "a")
  270. driver.find_element_by_tag_name("body").send_keys(Keys.COMMAND, "c")
  271. driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL, "c")
  272. time.sleep(0.5)
  273. driver.switch_to.window(driver.window_handles[0])
  274.  
  275. time.sleep(0.5)
  276. message_input = fetch_message_input(driver)
  277. if message_input != None:
  278. message_input.send_keys(Keys.CONTROL, 'a')
  279. message_input.send_keys(Keys.CONTROL, 'v')
  280. message_input.send_keys(Keys.COMMAND, 'a')
  281. message_input.send_keys(Keys.COMMAND, 'v')
  282.  
  283.  
  284. send_button = fetch_send_button(driver)
  285. if send_button != None:
  286. send_button.click()
  287. time.sleep(0.5)
  288.  
  289.  
  290.  
  291.  
  292. driver.switch_to.window(driver.window_handles[1])
  293. driver.close()
  294.  
  295. source.seek(0)
  296. if s_end +395 < len(source.readlines()):
  297. s_start = s_end
  298. s_end += 395
  299.  
  300.  
  301. if len(data) == 0:
  302. break
  303.  
  304.  
  305. if i < len(senders)-1:
  306. i += 1
  307. d_start = d_end
  308. d_end += 10000
  309.  
  310. driver.switch_to.window(driver.window_handles[0])
  311.  
  312. driver.close()
  313.  
  314. if __name__ == '__main__':
  315. launch(s_start,s_end,d_start,d_end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement