Skip to content

Instantly share code, notes, and snippets.

@lYlantis
Created August 7, 2017 16:54
Show Gist options
  • Save lYlantis/b3d3ba6275c5a0218d2d7639fef179f6 to your computer and use it in GitHub Desktop.
Save lYlantis/b3d3ba6275c5a0218d2d7639fef179f6 to your computer and use it in GitHub Desktop.
First attempt at using selenium to automate sending emails to your representatives.
#! python3
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time, random
from datetime import datetime
firstName = Bob
lastName = Smith
city = Anywhere
streetAddress = 1450 St
zipCode = 10001
email = myemail@email.com
phoneNum = '1234567890'
subject_and_message = {}
subject_and_message['Net Neutrality'] = ('I would like to take the time to contact you regarding net neutrality. I support preserving net neutrality and Title II. '
'I specifically support strong net neutrality backed by Title II oversight of ISPs. This is an issue that could be decisively '
'decided by congress. I urge you to support a solution to keep strong support for net neutrality. '
'\n Sincerely, \n'
+ firstName + ' ' + lastName)
subject_and_message['Selling Browsing History'] = ('I would like to take the time to contact you regarding the recent vote to allow ISP\'s to sell consumer browsing history. '
'I strongly oppose the moving forward with ISP\'s ability to sell consumer information without their consent. '
'This is a flagrant violation of our privacy. I strongly urge you to oppose any legislation of this type. '
'\n Sincerely, \n'
+ firstName + ' ' + lastName)
#Pick a random message
random.seed(datetime.now())
subject, message = random.choice(list(subject_and_message.items()))
#Open Browser
browser = webdriver.Firefox()
browser.get('https://democracy.io')
#Enter address
streetElem = browser.find_element_by_id('streetAddress1')
streetElem.send_keys(streetAddress)
cityElem = browser.find_element_by_id('city1')
cityElem.send_keys(city)
zipElem = browser.find_element_by_id('zip1')
zipElem.send_keys(zipCode)
#Hit submit
buttonElem = browser.find_element_by_id('submitAddress')
buttonElem.click()
time.sleep(5)
#Select who to send to. (default all)
buttonElem = browser.find_element_by_xpath("//button[contains(text(), 'Write to them!')]")
buttonElem.click()
time.sleep(5)
#Enter in a subject
subjectElem = browser.find_element_by_id('inputSubject')
subjectElem.click()
subjectElem.send_keys(subject)
#Enter in the message
messageElem = browser.find_element_by_id('inputMessage')
messageElem.click()
messageElem.send_keys(message)
#Enter in your email address
emailElem = browser.find_element_by_id('inputEmail')
emailElem.click()
emailElem.send_keys(email)
#Enter in your first name
firstElem = browser.find_element_by_id('inputFirstName')
firstElem.click()
firstElem.send_keys(firstName)
#Enter in your last name
lastElem = browser.find_element_by_id('inputLastName')
lastElem.click()
lastElem.send_keys(lastName)
#Choose Prefix - Mr.
prefixElem = browser.find_element_by_id('inputPrefix')
prefixElem.click()
prefixElem.send_keys(Keys.UP)
prefixElem.send_keys(Keys.UP)
prefixElem.send_keys(Keys.TAB)
#Enter phone number
phoneElem = browser.find_element_by_id('inputPhoneNumber')
phoneElem.click()
phoneElem.send_keys(phoneNum)
#Enter Topics - This does not quite work as intended yet
for i in browser.find_elements_by_id('inputTopic'):
try:
select = Select(browser.find_element_by_id('inputTopic'))
select.select_by_visible_text('Other')
select.send_keys(Keys.TAB)
time.sleep(.5)
except:
try:
select = Select(browser.find_element_by_id('inputTopic'))
select.select_by_visible_text('Economy')
select.send_keys(Keys.TAB)
time.sleep(.5)
except:
topicElem = browser.find_element_by_id('inputTopic')
topicElem.send_keys(Keys.TAB)
topicElem.send_keys(Keys.TAB)
topicElem.send_keys(Keys.TAB)
time.sleep(.5)
#Hit the send button
buttonElem = browser.find_element_by_xpath("//button[contains(text(), 'Send!')]")
#Uncomment me to actually send
#sendElem.click()
print('message sent!')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment