├── Accounts.txt ├── LICENSE ├── README.md └── ebayWatch.py /Accounts.txt: -------------------------------------------------------------------------------- 1 | user:pass 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Johnson Nguy 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 | # EbayWatchBot 2 | An Ebay Bot that increases the watcher of your listing 3 | This program helps you generate multiple ebay accounts using a catchall email domain and stores it into a file. 4 | 5 | 6 | Accounts.txt format must be username:password. 7 | 8 | 9 | # Current Features 10 | 11 | - Account Generator (Only can generate around 5-7 accounts per day). 12 | - Watch list (Using selenium) 13 | - Headless Mode 14 | 15 | 16 | 17 | # TO DO 18 | 19 | - Implement Threading to increase speed and efficiency. 20 | - Proxy Support to generate more accounts per day. 21 | - Discord Support. 22 | -------------------------------------------------------------------------------- /ebayWatch.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | from selenium.webdriver.common.keys import Keys 3 | from selenium.webdriver.chrome.options import Options 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 | from selenium.common.exceptions import TimeoutException 8 | from threading import Thread 9 | import random 10 | import string 11 | import os 12 | import time 13 | 14 | def createSession(): 15 | chrome_option = Options() 16 | chrome_option.add_argument("--headless") 17 | chrome_option.add_argument('--disable-gpu') 18 | chrome_option.add_argument('start-maximized') 19 | chrome_option.add_argument("--disable-extensions") 20 | chrome_option.add_argument('disable-infobars') 21 | chrome_option.add_argument('--no-sandbox') 22 | 23 | driver = webdriver.Chrome(chrome_options=chrome_option) 24 | # driver = webdriver.Chrome() Non headless mode. 25 | return driver 26 | 27 | def login(username, password, driver): 28 | driver.get("https://www.ebay.com/signin") 29 | element_present = EC.presence_of_element_located((By.ID, 'userid')) 30 | WebDriverWait(driver, 1).until(element_present) 31 | driver.find_element_by_id("userid").send_keys(username) 32 | driver.find_element_by_id("pass").send_keys(password) 33 | driver.find_element_by_id("sgnBt").click() 34 | redirectedUrl = str(driver.current_url) 35 | #Code to check for the suspension notice or if entered wrong password. 36 | if ('https://www.ebay.com/signin' in redirectedUrl): 37 | print("[ERROR] Login Issue") 38 | return False 39 | return True 40 | 41 | def addToWatchList(productURL,driver): 42 | #time.sleep(0) 43 | driver.get(productURL) 44 | element_present = EC.presence_of_element_located((By.CLASS_NAME, 'vi-atw-txt')) 45 | WebDriverWait(driver, 1).until(element_present) 46 | watchingElement = driver.find_element_by_class_name("vi-atw-txt") 47 | if ('watching' in watchingElement.text.lower()): 48 | print('[ERROR] Already Watched. ') 49 | driver.close() 50 | else: 51 | driver.find_element_by_id("vi-atl-lnk").click() 52 | print('[SUCCESS] Successfully Watched! ') 53 | time.sleep(1) 54 | driver.quit() 55 | 56 | def parseTXT(): 57 | os.chdir("C:\\######\\######\\#####\\#####\\#####") 58 | with open("Accounts.txt") as accountsList: 59 | accounts = accountsList.read().splitlines() 60 | return accounts 61 | 62 | #Method to generate ebay accounts and append it into Accounts.txt 63 | #Limits to 4 accounts per day. 64 | def generateAccount(numAccount): 65 | password = "password123" #SET YOUR PASSWORD HERE DEFAULT IS password123 66 | registerLink = "https://reg.ebay.com/reg/PartialReg?ru=https%3A%2F%2Fwww.ebay.com%2F" 67 | for i in range(numAccount): 68 | firstName = randomName() 69 | lastName = randomName() 70 | email = randomCatchall('YOURCATCHALL') # ENTER YOUR CATCH-ALL DOMAIN HERE 71 | driver = webdriver.Chrome() 72 | driver.get(registerLink) 73 | driver.find_element_by_name("firstname").send_keys(firstName) 74 | driver.find_element_by_name("lastname").send_keys(lastName) 75 | driver.find_element_by_name("email").send_keys(email) 76 | driver.find_element_by_name("PASSWORD").send_keys(password) 77 | element_present = EC.presence_of_element_located((By.ID, 'ppaFormSbtBtn')) 78 | WebDriverWait(driver, 1).until(element_present) 79 | driver.find_element_by_id("ppaFormSbtBtn").click() 80 | print("[SUCCESS] Account Created!") 81 | print("Login: " + email) 82 | print("Password: " + password) 83 | time.sleep(5) # Idle time to make sure requests has been successfully created. 84 | updateAccountsTXT(email, password) 85 | 86 | #Method to generate random catchalls 87 | def randomCatchall(domain): 88 | randomLength = int(random.choice(string.digits)) + 1 89 | Randomid = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(randomLength)) 90 | catchall = Randomid + "@"+ domain 91 | return catchall 92 | 93 | #Method to generate random names 94 | def randomName(): 95 | randomLength = int(random.choice(string.digits)) + 4 96 | name = ''.join(random.choice(string.ascii_letters) for _ in range(randomLength)) 97 | return name 98 | 99 | def updateAccountsTXT(user, passw): 100 | os.chdir("C:\\####\\#####\\#####\\#####\\#####") 101 | f = open("Accounts.txt", "a") 102 | text = user + ":" + passw + "\n" 103 | f.write(text) 104 | 105 | def task(ebayLink): 106 | list_of_accounts = parseTXT() 107 | taskDone=False 108 | for account in list_of_accounts: 109 | account_split = account.split(":") 110 | user = account_split[0] 111 | passw = account_split[1] 112 | sess = createSession() 113 | successLogin=login(user, passw, sess) 114 | if(successLogin == True): 115 | addToWatchList(ebayLink, sess) 116 | print("Finished Watching.") 117 | 118 | def startWatch(prodLink): 119 | taskDone = False 120 | list_of_accounts = parseTXT() 121 | 122 | if __name__ == "__main__": 123 | wantGen = input("Do you want to generate account? y or n: ") 124 | if ('y' in wantGen): 125 | numAccount = int(input("How many accounts (Recommended 4): ")) 126 | generateAccount(numAccount) 127 | else: 128 | link = input('Enter your ebay link: ') 129 | task(link) 130 | --------------------------------------------------------------------------------