Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from selenium import webdriver
- from selenium.webdriver.common.keys import Keys
- from selenium.common.exceptions import TimeoutException, NoSuchElementException
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.webdriver.common.by import By
- import time, csv
- import random
- import string
- from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
- from selenium.webdriver.common.action_chains import ActionChains
- import codecs
- import pyperclip
- from pathlib import Path
- import os
- from email.mime.multipart import MIMEMultipart
- from email.mime.text import MIMEText
- import smtplib
- import imapclient, csv
- import time
- import random
- from selenium import webdriver
- import pyzmail
- import json
- import ssl
- DEFAULT_TIMEOUT = 300
- def fetch_new_message_button(driver):
- try:
- search_key = "//i[@data-icon-name='Add']"
- element_not_visible = EC.invisibility_of_element((By.ID, "loadingContainer"))
- WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_not_visible)
- #print('Container not visible!')
- element_present = EC.presence_of_element_located((By.XPATH, search_key))
- WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_present)
- #print('add icon located!')
- element_clickable = EC.element_to_be_clickable((By.XPATH, search_key))
- my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_clickable)
- #print('add icon clickable!')
- return my_element
- except TimeoutException:
- print ("timeout except new message btn")
- return None
- def fetch_to_input(driver):
- try:
- search_key = "//input[contains(@class,'ms-BasePicker-input pickerInput')]"
- element_located = EC.presence_of_all_elements_located((By.XPATH,search_key))
- WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
- element_visible = EC.visibility_of_all_elements_located((By.XPATH,search_key))
- my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
- return my_element[0]
- except TimeoutException:
- return None
- def fetch_send_button(driver):
- try:
- search_key = "//span[(contains(.,'Send') or contains(.,'Envoyer')) and contains(@class,'ms-Button-label labe')]"
- element_located = EC.presence_of_element_located((By.XPATH,search_key))
- WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
- element_visible = EC.element_to_be_clickable((By.XPATH,search_key))
- my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
- return my_element
- except TimeoutException:
- return None
- def fetch_subject_input(driver):
- try:
- search_key = "//input[contains(@id,'subjectLine')]"
- element_located = EC.presence_of_all_elements_located((By.XPATH,search_key))
- WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
- element_visible = EC.visibility_of_all_elements_located((By.XPATH,search_key))
- my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
- return my_element[0]
- except TimeoutException:
- return None
- def fetch_message_input(driver):
- try:
- search_key = "//div[@aria-label = 'Corps du message' or @aria-label = 'Message body']"
- element_located = EC.presence_of_element_located((By.XPATH,search_key))
- WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
- element_visible = EC.element_to_be_clickable((By.XPATH,search_key))
- my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
- return my_element
- except TimeoutException:
- return None
- def fetch_cci_input(driver):
- try:
- search_key = "//input[contains(@class,'ms-BasePicker-input pickerInput')]"
- element_located = EC.presence_of_all_elements_located((By.XPATH,search_key))
- WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_located)
- element_visible = EC.visibility_of_all_elements_located((By.XPATH,search_key))
- my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_visible)
- return my_element[1]
- except TimeoutException:
- return None
- def fetch_cci_button(driver):
- try:
- #print('started')
- search_key = "//span[(contains(.,'Cci') or contains(.,'Bcc')) and contains(@class,'ms-Button-label label-')]"
- element_present = EC.presence_of_element_located((By.XPATH, search_key))
- WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_present)
- element_clickable = EC.element_to_be_clickable((By.XPATH, search_key))
- my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_clickable)
- return my_element
- except TimeoutException:
- print ("timeout except")
- return None
- def fetch_passwd_input(driver):
- try:
- #print('started')
- search_key = "//input[@name='passwd']"
- element_present = EC.presence_of_element_located((By.XPATH, search_key))
- WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_present)
- element_clickable = EC.element_to_be_clickable((By.XPATH, search_key))
- my_element = WebDriverWait(driver, DEFAULT_TIMEOUT).until(element_clickable)
- return my_element
- except TimeoutException:
- print ("timeout except")
- return None
- def randomString(stringLength=4):
- """Generate a random string of fixed length """
- letters = string.ascii_lowercase
- return ''.join(random.choice(letters) for i in range(stringLength))
- config_path = Path.cwd()/'config.json'
- with open(config_path) as f:
- config = json.load(f)
- #print(config['from_emails_path'])
- s_start = 0
- s_end = 395
- data_path = Path.cwd()/config['list_path']
- source = open(data_path)
- from_emails_path = Path.cwd()/config['from_emails_path']
- with open(from_emails_path, 'r') as f:
- reader = csv.reader(f)
- emails = list(reader)
- i = 0
- d_start = 0
- d_end = 10000
- source.seek(0)
- data = ''.join([ str(line[:-1])+";" for line in source.readlines()[d_start:d_end] ])
- def launch(s_start, s_end,d_start,d_end ):
- for email in emails:
- caps = DesiredCapabilities().FIREFOX
- exec_path = Path.cwd()/"geckodriver"
- driver = webdriver.Firefox(capabilities=caps, executable_path = str(exec_path))
- 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")
- elem = driver.find_element_by_name("loginfmt")
- elem.send_keys(email[0])
- next_button = driver.find_element_by_id("idSIButton9")
- next_button.send_keys(Keys.ENTER);
- timeout = 300
- account_locked = False
- try:
- element_present = EC.element_to_be_clickable((By.XPATH, "//div[contains(@id,'msaTile')]"))
- WebDriverWait(driver, timeout).until(element_present)
- account_locked = True
- except TimeoutException:
- account_locked = False
- print(account_locked)
- if(account_locked):
- skip_button = driver.find_element_by_xpath("//div[contains(@id,'msaTile')]")
- skip_button.send_keys(Keys.ENTER);
- print (email[1])
- passwd_input = fetch_passwd_input(driver)
- print (passwd_input)
- if passwd_input != None:
- passwd_input.send_keys(email[1])
- time.sleep(0.5)
- next_button = driver.find_element_by_id("idSIButton9")
- next_button.send_keys(Keys.ENTER);
- for _ in range(5):
- driver.switch_to.window(driver.window_handles[0])
- source.seek(0)
- data = ''.join([ str(line[:-1])+";" for line in source.readlines()[s_start:s_end] ])
- new_message_btn = fetch_new_message_button(driver)
- if new_message_btn != None:
- new_message_btn.click()
- cci_btn = fetch_cci_button(driver)
- if cci_btn != None:
- cci_btn.click()
- to_input = fetch_to_input(driver)
- if to_input != None:
- to_input.send_keys(config['to_email'])
- cci_input = fetch_cci_input(driver)
- if cci_input != None:
- pyperclip.copy(data)
- cci_input.send_keys(Keys.CONTROL, "v")
- cci_input.send_keys(Keys.COMMAND, "v")
- cci_input.send_keys(";")
- cci_input.send_keys(config['test_email'])
- subject_input = fetch_subject_input(driver)
- #print('11')
- if subject_input != None:
- #print('22')
- subject_input.send_keys(config['subject'])
- letter_path = Path.cwd()/config['letter_path']
- URL = letter_path.as_uri()
- js = '''window.open('https://www.google.com');'''
- driver.execute_script(js)
- driver.switch_to.window(driver.window_handles[1])
- driver.get(letter_path.as_uri())
- driver.find_element_by_tag_name("body").send_keys(Keys.COMMAND, "a")
- driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL, "a")
- driver.find_element_by_tag_name("body").send_keys(Keys.COMMAND, "c")
- driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL, "c")
- time.sleep(0.5)
- driver.switch_to.window(driver.window_handles[0])
- time.sleep(0.5)
- message_input = fetch_message_input(driver)
- if message_input != None:
- message_input.send_keys(Keys.CONTROL, 'a')
- message_input.send_keys(Keys.CONTROL, 'v')
- message_input.send_keys(Keys.COMMAND, 'a')
- message_input.send_keys(Keys.COMMAND, 'v')
- send_button = fetch_send_button(driver)
- if send_button != None:
- send_button.click()
- time.sleep(0.5)
- driver.switch_to.window(driver.window_handles[1])
- driver.close()
- source.seek(0)
- if s_end +395 < len(source.readlines()):
- s_start = s_end
- s_end += 395
- if len(data) == 0:
- break
- if i < len(senders)-1:
- i += 1
- d_start = d_end
- d_end += 10000
- driver.switch_to.window(driver.window_handles[0])
- driver.close()
- if __name__ == '__main__':
- launch(s_start,s_end,d_start,d_end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement