├── .gitignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── cleaned_email.py ├── emails.py ├── getOpenVPNUsernamePassword.py ├── guerrillamail.py ├── input_emails.txt ├── lastused.txt ├── list.csv ├── openVPNUsernamePassword.txt ├── requirements.txt └── script.py /.gitignore: -------------------------------------------------------------------------------- 1 | chromedriver 2 | packages* 3 | temp_mail* 4 | autopexpect/ 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.pythonPath": "/usr/bin/python3", 3 | "editor.fontSize": 16, 4 | "files.autoSave": "afterDelay", 5 | "files.autoSaveDelay": 1000 6 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 hendrikbgr 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ProtonVPN Account Creator 2 | 3 | 4 | ## Getting Started 5 | 6 | This script can create ProtonVPN using Python and Selenium 7 | 8 | ### Prerequisites 9 | 10 | You need python 3 installed on your System. 11 | 12 | ``` 13 | pip install -r requirements.txt 14 | ``` 15 | You need chromedriver 16 | #### Download chromedriver from 17 | https://chromedriver.chromium.org/downloads 18 | 19 | After that you can proceed to edit the Script. 20 | 21 | ### Edit Script 22 | 23 | Open emails.py with any TextEditor. 24 | 25 | Find and replace 'wowmania' with a random word of your choice 26 | 27 | ## Running 🏃🏽‍♂️ 28 | 29 | ### Create new account 30 | 31 | ``` 32 | python3 emails.py #slower 33 | python3 cleaned_emails.py #faster 34 | ``` 35 | 36 | ### Fetch openVPN credentials 37 | ``` 38 | python3 getOpenVPNUsernamePassword.py 39 | ``` 40 | 41 | ### Change details to protonvpn-cli 42 | * [protonvpn-cli](https://github.com/ProtonVPN/protonvpn-cli-ng) 43 | Note: A protonvpn profile must be in place since the script uses `sudo protonvpn configure`. Use `sudo protonvpn init` to create one. 44 | ``` 45 | python3 script.py 46 | ``` 47 | 48 | ## Built With 49 | 50 | * [Selenium-Python](https://selenium-python.readthedocs.io/) - Tool for browser automation 51 | 52 | ## Authors 53 | 54 | * **Hendrik Bgr** - *Initial work* - [HendrikBgr](https://github.com/hendrikbgr) 55 | * **Prashant Raj** - *Verification Added* - [PrashantRaj](https://github.com/PrashantRaj18198) 56 | 57 | 58 | ## License 59 | 60 | This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details 61 | 62 | ## Acknowledgments 63 | 64 | * Hat tip to anyone whose code was used 65 | * Inspiration 66 | 67 | ## To Do List 📝 68 | 69 | * Add random username and password. ✅ 70 | * Print account details to in console ✅ 71 | * Add more information to console when running ✅ 72 | * Create requirements.txt file for easy installation ✅ 73 | * Verification email ✅ 74 | 75 | 76 | -------------------------------------------------------------------------------- /cleaned_email.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | from selenium import webdriver 4 | from selenium.webdriver.common.by import By 5 | from selenium.webdriver.support.ui import WebDriverWait 6 | from selenium.webdriver.support import expected_conditions as EC 7 | from colorama import Fore, Back, Style 8 | import warnings 9 | import time 10 | import random 11 | import string 12 | import urllib.request 13 | import requests 14 | import csv 15 | import sys 16 | from proxyscrape import create_collector 17 | import os 18 | 19 | 20 | from selenium.webdriver.chrome.options import Options 21 | from selenium.webdriver.support.select import Select 22 | 23 | print('ProtonVPN account creation started') 24 | 25 | warnings.filterwarnings("ignore", category=DeprecationWarning) 26 | 27 | options = Options() 28 | 29 | email_driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options) 30 | 31 | email_url = 'https://www.guerrillamail.com/' 32 | 33 | print("Loading temp-mail server:", email_url) 34 | 35 | email_driver.get(email_url) 36 | 37 | t = 0 38 | timeout = 60 39 | 40 | wait = WebDriverWait(email_driver, 60) 41 | 42 | def checkTimeout(): 43 | global t, timeout 44 | if t > timeout: 45 | t = 0 46 | print("Connection timed out. Exiting now!") 47 | exit(-1) 48 | t += 1 49 | 50 | while True: 51 | try: 52 | email = email_driver.find_element_by_id('inbox-id').text + '@' 53 | domain_name = Select(email_driver.find_element_by_id('gm-host-select')).first_selected_option.text 54 | email += domain_name 55 | print(email) 56 | break 57 | except: 58 | checkTimeout() 59 | time.sleep(1) 60 | 61 | 62 | verifymail = email 63 | 64 | # Change Path to Chrome Driver Path (or move your ChromeDriver into the project folder) 65 | driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options) 66 | 67 | 68 | url = 'http://account.protonvpn.com/signup' 69 | 70 | def randomStringDigits(stringLength=13): 71 | # Generate a random string of letters and digits 72 | lettersAndDigits = string.ascii_letters + string.digits 73 | return ''.join(random.choice(lettersAndDigits) for i in range(stringLength)) 74 | 75 | def getUserName(): 76 | f = open('lastused.txt') 77 | val = int(f.readline().strip()) 78 | f.close() 79 | f = open('lastused.txt', 'w') 80 | val += 1 81 | f.write(str(val)) 82 | return 'AbolitionMan'+str(val - 1) 83 | 84 | rngusername = getUserName() 85 | rngpassword = 'infinity' 86 | 87 | print("Loading protonvpn server:", url) 88 | 89 | driver.get(url) 90 | 91 | while True: 92 | try: 93 | driver.find_element_by_css_selector("body > div.app-root > main > main > div > div:nth-child(5) > div:nth-child(1) > div.flex-item-fluid-auto.pt1.pb1.flex.flex-column > button").click() 94 | break 95 | except: 96 | checkTimeout() 97 | time.sleep(1) 98 | 99 | while True: 100 | try: 101 | driver.find_element_by_id("username").send_keys(rngusername) 102 | driver.find_element_by_id("password").send_keys(rngpassword) 103 | driver.find_element_by_id("passwordConfirmation").send_keys(rngpassword) 104 | driver.find_element_by_id("email").send_keys(verifymail) 105 | driver.find_element_by_css_selector("body > div.app-root > main > main > div > div.pt2.mb2 > div > div:nth-child(1) > form > div:nth-child(3) > div > button").click() 106 | break 107 | except: 108 | checkTimeout() 109 | time.sleep(1) 110 | while True: 111 | try: 112 | driver.find_element_by_css_selector("body > div.app-root > main > main > div > div.pt2.mb2 > div > div.w100 > div:nth-child(2) > div > div > div:nth-child(2) > form > div:nth-child(2) > button").click() 113 | break 114 | except: 115 | checkTimeout() 116 | time.sleep(1) 117 | 118 | print("Wait for verification") 119 | 120 | while True: 121 | try: 122 | val = email_driver.find_element_by_class_name('email-excerpt').text 123 | if not val[-6:].isnumeric(): 124 | raise Exception 125 | print(val[-6:], "verification") 126 | driver.find_element_by_id('code').send_keys(val[-6:]) 127 | time.sleep(1) 128 | driver.find_element_by_css_selector('body > div.app-root > main > main > div > div.pt2.mb2 > div > div.w100 > div:nth-child(2) > form > div > div > div:nth-child(4) > button').click() 129 | break 130 | except: 131 | checkTimeout() 132 | time.sleep(1) 133 | 134 | print("Account Created \uE405\nYour Details") 135 | 136 | f = open('list.csv', 'a') 137 | info = rngusername +', '+ rngpassword + '\n' 138 | f.write(info) 139 | print("Username", rngusername, "Password", rngpassword) 140 | print("Info also added to list.csv") 141 | time.sleep(5) 142 | driver.quit() 143 | email_driver.quit() -------------------------------------------------------------------------------- /emails.py: -------------------------------------------------------------------------------- 1 | # 🚀 This Project is in it's early stages of Development. 2 | # 📌 Working on new features and main menu. 3 | # ⚠️ Any Questions or Suggestions please Mail to: hendriksdevmail@gmail.com 4 | # 🖥 Version: 1.0.0 5 | 6 | from selenium import webdriver 7 | from colorama import Fore, Back, Style 8 | import warnings 9 | import time 10 | import random 11 | import string 12 | import urllib.request 13 | import requests 14 | import csv 15 | import sys 16 | from proxyscrape import create_collector 17 | import os 18 | clear = lambda: os.system('clear') 19 | clear() 20 | 21 | collector = create_collector('my-collector', 'https') 22 | 23 | print ('\033[31m' + """\ 24 | ____ __ __ ___ _ __ 25 | / __ \_________ / /_____ ____ / |/ /___ _(_) / 26 | / /_/ / ___/ __ \/ __/ __ \/ __ \/ /|_/ / __ `/ / / 27 | / ____/ / / /_/ / /_/ /_/ / / / / / / / /_/ / / / 28 | /_/ /_/ \____/\__/\____/_/ /_/_/ /_/\__,_/_/_/ 29 | 30 | ___ __ 31 | / | ______________ __ ______ / /_ 32 | / /| |/ ___/ ___/ __ \/ / / / __ \/ __/ 33 | / ___ / /__/ /__/ /_/ / /_/ / / / / /_ 34 | /_/ |_\___/\___/\____/\__,_/_/ /_/\__/ 35 | 36 | ______ __ 37 | / ____/_______ ____ _/ /_____ _____ 38 | / / / ___/ _ \/ __ `/ __/ __ \/ ___/ 39 | / /___/ / / __/ /_/ / /_/ /_/ / / 40 | \____/_/ \___/\__,_/\__/\____/_/ 41 | """ + '\033[0m') 42 | 43 | time.sleep(15) 44 | 45 | restart = 2 46 | while (restart > 1): 47 | # Pick an email for Verification. Replace 'YourEmail@Mail.com' with an email adress. (You can use 10min mail for this) 48 | # verifymail = input('\033[31m' + "Enter Email Adress for Verification: " + '\033[0m') 49 | verifymail = '' 50 | # f = open('./input_emails.txt') 51 | # verifymail = f.readline().trim() 52 | # verifymail = 'itlammhewuicxfmhco@ttirv.org' 53 | 54 | # Pick an email for Notification. Replace 'YourEmail@Mail.com' with an email adress. (You can use 10min mail for this) 55 | # notifymail = input('\033[31m' + "Enter Email Adress for Recovery: " + '\033[0m') 56 | notifymail = '' 57 | # notifymail = 'itlammhewuicxfmhco@ttirv.org' 58 | proxy_status = "false" 59 | while (proxy_status == "false" and False): 60 | 61 | # Retrieve only 'us' proxies 62 | proxygrab = collector.get_proxy({'code': ('in')}) 63 | proxy = ("{}:{}".format(proxygrab.host, proxygrab.port)) 64 | print ('\033[31m' + "Proxy:", proxy + '\033[0m') 65 | 66 | try: 67 | proxy_host = proxygrab.host 68 | proxy_port = proxygrab.port 69 | proxy_auth = ":" 70 | proxies = {'http':'http://{}@{}:{}/'.format(proxy_auth, proxy_host, proxy_port)} 71 | requests.get("http://example.org", proxies=proxies, timeout=1.5) 72 | 73 | except OSError: 74 | print ('\033[31m' + "Proxy Connection error!" + '\033[0m') 75 | time.sleep(1) 76 | sys.stdout.write("\033[F") 77 | sys.stdout.write("\033[K") 78 | sys.stdout.write("\033[F") 79 | sys.stdout.write("\033[K") 80 | proxy_status = "false" 81 | else: 82 | print ('\033[31m' + "Proxy is working..." + '\033[0m') 83 | time.sleep(1) 84 | sys.stdout.write("\033[F") 85 | sys.stdout.write("\033[K") 86 | sys.stdout.write("\033[F") 87 | sys.stdout.write("\033[K") 88 | proxy_status = "true" 89 | 90 | 91 | else: 92 | from selenium.webdriver.chrome.options import Options 93 | from selenium.webdriver.support.select import Select 94 | 95 | warnings.filterwarnings("ignore", category=DeprecationWarning) 96 | 97 | options = Options() 98 | 99 | email_driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options) 100 | 101 | email_url = 'https://www.guerrillamail.com/' 102 | 103 | email_driver.get(email_url) 104 | 105 | time.sleep(4) 106 | 107 | # # print(driver.find_element_by_id('inbox-id').text) 108 | email = email_driver.find_element_by_id('inbox-id').text + '@'; 109 | domain_name = Select(email_driver.find_element_by_id('gm-host-select')).first_selected_option.text 110 | # # domain_name = email_driver.find_element_by_id('gm-host-select').text 111 | email += domain_name 112 | # print(domain_name) 113 | print(email) 114 | # f = open('./input_emails.txt', 'w') 115 | # f.write(email) 116 | 117 | verifymail = email 118 | # email_driver.find_element_by_partial_link_text('verification').click() 119 | # options.add_argument('--proxy-server={}'.format(proxy)) 120 | 121 | # Change Path to Chrome Driver Path (or move your ChromeDriver into the project folder) 122 | driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options) 123 | 124 | # url = 'http://protonmail.com/signup' 125 | url = 'http://account.protonvpn.com/signup' 126 | #url = 127 | 128 | 129 | def randomStringDigits(stringLength=13): 130 | # Generate a random string of letters and digits 131 | lettersAndDigits = string.ascii_letters + string.digits 132 | return ''.join(random.choice(lettersAndDigits) for i in range(stringLength)) 133 | 134 | def getUserName(): 135 | f = open('lastused.txt') 136 | val = int(f.readline()) 137 | f.close() 138 | f = open('lastused.txt', 'w') 139 | val += 1 140 | f.write(str(val)) 141 | return 'wowmainia'+str(val - 1) 142 | 143 | rngusername = getUserName() 144 | rngpassword = randomStringDigits(15) 145 | 146 | driver.get(url) 147 | 148 | # time.sleep(10) 149 | 150 | # driver.find_element_by_class_name('pm-button w100 mtauto pm-button--primaryborder').click() 151 | # driver.find_element_by_link_text("Get Free").click() 152 | # driver.find_element_by_xpath("/html/body/div[1]/main/main/div/div[4]/div[1]/div[3]/button").click() 153 | while True: 154 | try: 155 | driver.find_element_by_css_selector("body > div.app-root > main > main > div > div:nth-child(5) > div:nth-child(1) > div.flex-item-fluid-auto.pt1.pb1.flex.flex-column > button").click() 156 | break 157 | except: 158 | time.sleep(1) 159 | continue 160 | 161 | # driver.find_element_by_id('freePlan').click() 162 | # driver.find_element_by_css_selector("#username").send_keys(rngusername) 163 | 164 | # time.sleep(4) 165 | 166 | # driver.switch_to_frame(0) 167 | 168 | # time.sleep(3) 169 | 170 | # driver.find_element_by_id('username').send_keys(rngusername) 171 | 172 | # time.sleep(1) 173 | 174 | # driver.find_element_by_css_selector("#username").send_keys(rngusername) 175 | while True: 176 | try: 177 | driver.find_element_by_id("username").send_keys(rngusername) 178 | driver.find_element_by_id("password").send_keys(rngpassword) 179 | driver.find_element_by_id("passwordConfirmation").send_keys(rngpassword) 180 | driver.find_element_by_id("email").send_keys(verifymail) 181 | driver.find_element_by_css_selector("body > div.app-root > main > main > div > div.pt2.mb2 > div > div:nth-child(1) > form > div:nth-child(3) > div > button").click() 182 | break 183 | except: 184 | time.sleep(1) 185 | # driver.switch_to.default_content() 186 | 187 | # time.sleep(1) 188 | 189 | # driver.find_element_by_id('password').send_keys(rngpassword) 190 | 191 | # time.sleep(1) 192 | 193 | # driver.find_element_by_id('passwordc').send_keys(rngpassword) 194 | 195 | # time.sleep(1) 196 | 197 | # driver.switch_to_frame(1) 198 | 199 | # time.sleep(1) 200 | 201 | # driver.find_element_by_id('notificationEmail').send_keys(notifymail) 202 | while True: 203 | try: 204 | driver.find_element_by_css_selector("body > div.app-root > main > main > div > div.pt2.mb2 > div > div.w100 > div:nth-child(2) > div > div > div:nth-child(2) > form > div:nth-child(2) > button").click() 205 | break 206 | except: 207 | time.sleep(1) 208 | # time.sleep(60) 209 | # time.sleep(1) 210 | # email_driver.find_element_by_partial_link_text('verification').click() 211 | # email_driver.find_element_by_link_text('notify@protonmail.ch ').click() 212 | while True: 213 | try: 214 | val = email_driver.find_element_by_class_name('email-excerpt').text 215 | if not val[-6:].isnumeric(): 216 | raise Exception 217 | print(val[-6:], "verification") 218 | driver.find_element_by_id('code').send_keys(val[-6:]) 219 | time.sleep(1) 220 | driver.find_element_by_css_selector('body > div.app-root > main > main > div > div.pt2.mb2 > div > div.w100 > div:nth-child(2) > form > div > div > div:nth-child(4) > button').click() 221 | break 222 | except: 223 | time.sleep(1) 224 | # driver.find_element_by_name('submitBtn').click() 225 | 226 | # time.sleep(6) 227 | 228 | # driver.find_element_by_id('id-signup-radio-email').click() 229 | 230 | # time.sleep(1) 231 | 232 | # driver.find_element_by_id('emailVerification').send_keys(verifymail) 233 | 234 | # time.sleep(1) 235 | 236 | # driver.find_element_by_class_name('codeVerificator-btn-send').click() 237 | 238 | # time.sleep(3) 239 | 240 | print ('\033[31m' + "Your New Email Adress is: ", rngusername,"@protonmail.com", sep='' + '\033[0m') 241 | print ('\033[31m' + "Your New Email Password is: " + '\033[0m' , rngpassword) 242 | 243 | complete = "false" 244 | 245 | while (complete == "false"): 246 | complete_q = input("Did you complete the Verification process? y/n: ") 247 | 248 | if complete_q == "y": 249 | driver.close() 250 | csvData = [[verifymail, rngpassword]] 251 | with open('list.csv', 'a') as csvFile: 252 | writer = csv.writer(csvFile) 253 | writer.writerows(csvData) 254 | csvFile.close() 255 | print ('Great! We added you account details to the table.') 256 | complete = "true" 257 | 258 | else: 259 | print ('Please try verifing and try again') 260 | time.sleep(1) 261 | complete = "false" 262 | else: 263 | restart_s = input("Do you want to restart the Script and create more Accounts? y/n: ") 264 | if restart_s == "y": 265 | restart ++ 1 266 | clear() 267 | print ('\033[31m' + """\ 268 | ____ __ __ ___ _ __ 269 | / __ \_________ / /_____ ____ / |/ /___ _(_) / 270 | / /_/ / ___/ __ \/ __/ __ \/ __ \/ /|_/ / __ `/ / / 271 | / ____/ / / /_/ / /_/ /_/ / / / / / / / /_/ / / / 272 | /_/ /_/ \____/\__/\____/_/ /_/_/ /_/\__,_/_/_/ 273 | 274 | ___ __ 275 | / | ______________ __ ______ / /_ 276 | / /| |/ ___/ ___/ __ \/ / / / __ \/ __/ 277 | / ___ / /__/ /__/ /_/ / /_/ / / / / /_ 278 | /_/ |_\___/\___/\____/\__,_/_/ /_/\__/ 279 | 280 | ______ __ 281 | / ____/_______ ____ _/ /_____ _____ 282 | / / / ___/ _ \/ __ `/ __/ __ \/ ___/ 283 | / /___/ / / __/ /_/ / /_/ /_/ / / 284 | \____/_/ \___/\__,_/\__/\____/_/ 285 | """ + '\033[0m') 286 | 287 | else: 288 | print ("Ok! The script is exiting now.") 289 | time.sleep(1) 290 | exit() 291 | else: 292 | print("something") 293 | -------------------------------------------------------------------------------- /getOpenVPNUsernamePassword.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | from selenium.webdriver.chrome.options import Options 3 | # from selenium.webdriver.firefox.options import Options 4 | import time 5 | from selenium.webdriver.common.by import By 6 | from selenium.webdriver.support.ui import WebDriverWait 7 | from selenium.webdriver.support import expected_conditions as EC 8 | 9 | f = open('./list.csv') 10 | lines = f.readlines() 11 | end = len(lines) - 1 12 | try: 13 | while lines[end] == '': 14 | end -= 1 15 | except IndexError: 16 | print("No username and password found in list.csv") 17 | exit(-1) 18 | 19 | username, password = lines[end].strip().split(', ') 20 | 21 | login_url = 'https://account.protonvpn.com/login' 22 | account_url = 'https://account.protonvpn.com/account' 23 | driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=Options()) 24 | 25 | # driver = webdriver.Firefox(executable_path='./geckodriver', firefox_options=Options()) 26 | driver.get(login_url) 27 | 28 | wait = WebDriverWait(driver, 60) 29 | 30 | try: 31 | loginElement = wait.until(EC.presence_of_element_located((By.ID, 'login'))) 32 | passwordElement = wait.until(EC.presence_of_element_located((By.ID, 'password'))) 33 | loginElement.send_keys(username) 34 | passwordElement.send_keys(password) 35 | buttonElement = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'body > div.app-root > main > div > div > div > div > form > div.flex.flex-spacebetween > button.pm-button.pm-button--primary'))) 36 | buttonElement.click() 37 | except: 38 | print('In first try/except') 39 | print("Timed Out. Now Exiting") 40 | exit(-1) 41 | 42 | try: 43 | account = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'body > div.app-root > div.flex.flex-nowrap.no-scroll > div > div > div.sidebar.flex.flex-column.noprint > nav > ul > li:nth-child(2) > a'))) 44 | account.click() 45 | time.sleep(1) 46 | print('Account found') 47 | 48 | username = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'body > div.app-root > div.flex.flex-nowrap.no-scroll > div > div > div.main.flex-item-fluid.main-area > div > main > div > section:nth-child(8) > div:nth-child(3) > div.pm-field-container > div > code'))) 49 | username = username.text 50 | print('username found', username) 51 | 52 | showButton = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'body > div.app-root > div.flex.flex-nowrap.no-scroll > div > div > div.main.flex-item-fluid.main-area > div > main > div > section:nth-child(8) > div:nth-child(4) > div.ml1.flex-item-noshrink.onmobile-ml0.onmobile-mt0-5 > button.pm-button.pm-button--for-icon > svg'))) 53 | showButton.click() 54 | print('show password button found') 55 | 56 | password = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'body > div.app-root > div.flex.flex-nowrap.no-scroll > div > div > div.main.flex-item-fluid.main-area > div > main > div > section:nth-child(8) > div:nth-child(4) > div.pm-field-container > div > code'))).text 57 | print('password found', password) 58 | 59 | f = open('openVPNUsernamePassword.txt', 'a') 60 | f.write(username + ', ' + password + '\n') 61 | f.close() 62 | print('Username and Password written to openVPNUsernamePassword.txt') 63 | except: 64 | print('In second try/except') 65 | print("Timed Out. Bad Luck Mate") 66 | finally: 67 | print('Executed without exceptions. Now exiting') 68 | driver.quit() 69 | -------------------------------------------------------------------------------- /guerrillamail.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | from colorama import Fore, Back, Style 3 | import warnings 4 | import time 5 | import random 6 | import string 7 | import urllib.request 8 | import requests 9 | import csv 10 | import sys 11 | from proxyscrape import create_collector 12 | from time import sleep 13 | import os 14 | clear = lambda: os.system('clear') 15 | clear() 16 | 17 | collector = create_collector('my-collector', 'https') 18 | 19 | from selenium.webdriver.chrome.options import Options 20 | from selenium.webdriver.support.select import Select 21 | 22 | warnings.filterwarnings("ignore", category=DeprecationWarning) 23 | 24 | options = Options() 25 | driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options) 26 | 27 | url = 'https://www.guerrillamail.com/' 28 | 29 | driver.get(url) 30 | 31 | time.sleep(4) 32 | 33 | print(driver.find_element_by_id('inbox-id').text) 34 | email = driver.find_element_by_id('inbox-id').text + '@'; 35 | domain_name = Select(driver.find_element_by_id('gm-host-select')).first_selected_option.text 36 | # domain_name = driver.find_element_by_id('gm-host-select').text 37 | email += domain_name 38 | print(domain_name) 39 | print(email) 40 | f = open('./input_emails.txt', 'w') 41 | f.write(email) 42 | # sleep(60) 43 | # driver.find_element_by_partial_link_text('verification').click() 44 | # print(driver.find_element_by_class_name('email-excerpt').text) 45 | # sleep(60) 46 | print(driver.find_element_by_class_name('email-excerpt').text) -------------------------------------------------------------------------------- /input_emails.txt: -------------------------------------------------------------------------------- 1 | cqitfctz@sharklasers.com -------------------------------------------------------------------------------- /lastused.txt: -------------------------------------------------------------------------------- 1 | 45 -------------------------------------------------------------------------------- /list.csv: -------------------------------------------------------------------------------- 1 | u6HuHwv0bKyh1@protonmail.com,Vze5bQ6rIf0AiIK 2 | felomax805@newe-mail.com,M0rS4UgMQ1Ylpzz 3 | wowmainia43, 7pJW9CL6CYf1jN9 4 | 5 | 6 | AbolitionMan37, infinity 7 | AbolitionMan33, 73mbigOBPsLUq 8 | AbolitionMan42, infinity 9 | AbolitionMan43, infinity 10 | AbolitionMan44, infinity 11 | -------------------------------------------------------------------------------- /openVPNUsernamePassword.txt: -------------------------------------------------------------------------------- 1 | AbolitionMan37AbolitionMan37, infinityinfinity 2 | yQJt.qdW4PrjuinO00KfV3OG, uBSE6N2nRate/qqJ7Cp8bK0s 3 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | selenium==3.141.0 2 | colorama==0.4.1 3 | requests==2.20.1 4 | proxyscrape==0.3.0 5 | -------------------------------------------------------------------------------- /script.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | import pexpect 4 | import sys 5 | import os 6 | import time 7 | 8 | f = open('./openVPNUsernamePassword.txt') 9 | lines = f.read().splitlines() 10 | right = len(lines) - 1 11 | try: 12 | while lines[right] == '': 13 | right -= 1 14 | except IndexError: 15 | print("No username and password found") 16 | exit(-1) 17 | username, password = lines[right].strip().split(', ') 18 | print([username, password]) 19 | print(lines) 20 | child = pexpect.spawn('/bin/bash') 21 | # child.logfile = sys.stdout 22 | child.sendline("sudo protonvpn configure") 23 | #time.sleep(0.5) 24 | #child.expect("Please enter your choice or leave empty") 25 | child.sendline('1') 26 | time.sleep(0.2) 27 | #child.expect(".*Enter your ProtonVPN OpenVPN username.*") 28 | time.sleep(0.2) 29 | child.sendline(username) 30 | #child.expect(".*Enter your ProtonVPN OpenVPN password.*") 31 | time.sleep(0.3) 32 | child.sendline(password) 33 | #child.expect(".*Confirm your OpenVPN password.*") 34 | time.sleep(0.2) 35 | child.sendline(password) 36 | #child.expect(".*Username and Password has been updated!.*") 37 | time.sleep(0.2) 38 | --------------------------------------------------------------------------------