Esempio n. 1
0
    def get_fandom_name(url: str) -> str:
        """Scrape browse page url and return fandom name.

        Args:
            url (str): url of fandom browse page
                       ex: https://www.fanfiction.net/book/Harry-Potter/

        Returns:
            str: scraped fandom name

        """

        options = uc.ChromeOptions()
        options.headless = True
        options.add_argument('--headless')
        chrome = uc.Chrome(options=options)

        chrome.get(url)
        html = chrome.page_source
        soup = BeautifulSoup(html, "lxml")

        regex = r" (FanFiction Archive|Crossover) \| FanFiction$"
        name = re.sub(regex, '', soup.find('title').string)

        time.sleep(5)
        chrome.quit()
        return name
Esempio n. 2
0
    def __init__(self, driver_name, driver_executable_path,
                 browser_executable_path, command_executor, driver_arguments):
        """Initialize the selenium webdriver

        Parameters
        ----------
        driver_name: str
            The selenium ``WebDriver`` to use
        driver_executable_path: str
            The path of the executable binary of the driver
        driver_arguments: list
            A list of arguments to initialize the driver
        browser_executable_path: str
            The path of the executable binary of the browser
        command_executor: str
            Selenium remote server endpoint
        """
        if driver_name == 'uc':
            # uses https://github.com/ultrafunkamsterdam/undetected-chromedriver to bypass blocking
            options = uc.ChromeOptions()
            for argument in driver_arguments:
                options.add_argument(argument)
            self.driver = uc.Chrome(options=options)
        else:
            webdriver_base_path = f'selenium.webdriver.{driver_name}'

            driver_klass_module = import_module(
                f'{webdriver_base_path}.webdriver')
            driver_klass = getattr(driver_klass_module, 'WebDriver')

            driver_options_module = import_module(
                f'{webdriver_base_path}.options')
            driver_options_klass = getattr(driver_options_module, 'Options')

            driver_options = driver_options_klass()

            if browser_executable_path:
                driver_options.binary_location = browser_executable_path
            for argument in driver_arguments:
                driver_options.add_argument(argument)

            driver_kwargs = {
                'executable_path': driver_executable_path,
                'options': driver_options
            }

            # locally installed driver
            if driver_executable_path is not None:
                driver_kwargs = {
                    'executable_path': driver_executable_path,
                    'options': driver_options
                }
                self.driver = driver_klass(**driver_kwargs)
            # remote driver
            elif command_executor is not None:
                from selenium import webdriver
                capabilities = driver_options.to_capabilities()
                self.driver = webdriver.Remote(
                    command_executor=command_executor,
                    desired_capabilities=capabilities)
Esempio n. 3
0
def check_for_update():
    BASE_URL = "https://www.amazon.co.uk/s?k=1440p+144hz+monitor&i=computers&rh=n%3A428652031%2Cp_n_specials_match%3A21583550031"

    options = uc.ChromeOptions()
    options.headless = True
    options.add_argument('--headless')
    chrome = uc.Chrome(options=options)
    chrome.get(BASE_URL)
    html = chrome.page_source

    soup = BeautifulSoup(html, features='lxml')

    results_html = soup.find_all(
        attrs={"data-component-type": "s-search-results"})[0].select(
            ".s-main-slot")[0].findChildren(
                attrs={"data-component-type": "s-search-result"},
                recursive=False)

    titles = list(
        map(lambda res: res.find(attrs={
            "class": "a-size-medium"
        }).get_text(), results_html))
    titles.sort()

    title_str = ''.join(titles)

    with open('results_cache.txt', "r") as f:
        if f.read() != title_str:
            send_notification()
            print("Sending notification")

    with open('results_cache.txt', 'w') as f:
        f.write(title_str)
Esempio n. 4
0
def get_cookie(url):
    global useragent, cookieJAR, cookie
    options = webdriver.ChromeOptions()
    arguments = [
    '--no-sandbox', '--disable-setuid-sandbox', '--disable-infobars', '--disable-logging', '--disable-login-animations',
    '--disable-notifications', '--disable-gpu', '--headless', '--lang=ko_KR', '--start-maxmized',
    '--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.18 NetType/WIFI Language/en' 
    ]
    for argument in arguments:
        options.add_argument(argument)
    driver = webdriver.Chrome(options=options)
    driver.implicitly_wait(3)
    driver.get(url)
    for _ in range(60):
        cookies = driver.get_cookies()
        tryy = 0
        for i in cookies:
            if i['name'] == 'cf_clearance':
                cookieJAR = driver.get_cookies()[tryy]
                useragent = driver.execute_script("return navigator.userAgent")
                cookie = f"{cookieJAR['name']}={cookieJAR['value']}"
                driver.quit()
                return True
            else:
                tryy += 1
                pass
        time.sleep(1)
    driver.quit()
    return False
Esempio n. 5
0
 def __init__(self):
     if Browser.__instance is not None:
         raise Exception("This class is a singleton!")
     else:
         Browser.__instance = self
     self.user_agent = ""
     options = uc.ChromeOptions()
     self.browser = uc.Chrome(options=options)
     self.cookie = Cookies.getCookies(self)
     self._setUserAgent()
Esempio n. 6
0
 def __init__(self):
     # prepare WebDriver
     self.options = uc.ChromeOptions()
     self.options.headless = False
     self.options.add_argument(
         '/Users/vincentyan/Library/Application Support/Google/Chrome')
     self.options.add_argument(
         'user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"'
     )
     self.driver = uc.Chrome(options=self.options)
Esempio n. 7
0
 def get_new_marionette(cls, headless: bool = False) -> uc.Chrome:
     print('Requesting a new marionette')
     options = uc.ChromeOptions()
     if headless:
         options.headless = True
         options.add_argument('--headless')
     options.add_argument('--disable-gpu')
     options.add_argument('--no-first-run --no-service-autorun --password-store=basic')
     driver = uc.Chrome(options=options)
     print('Got new marionette.')
     return driver
Esempio n. 8
0
    def __init__(self, proxy=False, headless=False):
        self.options = uc.ChromeOptions()
        if headless:
            self.options.headless = True
            self.options.add_argument('--headless')

        if proxy:
            self.set_proxy()

        self.driver = uc.Chrome(options=self.options)
        self.logger = logging.getLogger(__name__)
        self.driver.implicitly_wait(0)
Esempio n. 9
0
def headless_uc(request: FixtureRequest):
    options = uc.ChromeOptions()
    options.headless = True
    request.instance.driver = uc.Chrome(options=options)

    def teardown():
        request.instance.driver.sapipve_screenshot(FAILED_SCREENSHOT_NAME)
        request.instance.driver.quit()

    request.addfinalizer(teardown)

    return request.instance.driver
Esempio n. 10
0
def get_chromedriver_options():
    options = uc.ChromeOptions()
    # options.headless=True
    # options.add_argument('--headless')
    options.add_argument("window-size=1280,800")
    # options.add_argument('--user-data-dir=/home/julius/.user_data')
    # options.add_argument('--disable-notifications')
    # options.add_argument('--allow-running-insecure-content')
    # options.add_argument('--no-sandbox')
    # options.add_argument('--disable-setuid-sandbox')
    # options.add_argument('--disable-web-security')
    return options
Esempio n. 11
0
 def __init__(self, **kwargs):
     super().__init__()
     option = uc.ChromeOptions()
     # option.add_argument('--headless')
     with open(self.custom_settings['cookie_dir'], 'r',
               encoding='utf-8') as f:
         cookie = json.loads(f.read())
     option.add_argument("--start-maximized")
     self.browser = uc.Chrome(options=option)
     self.browser.get(self.start_urls)
     # load cookies
     for cookie_ in cookie:
         self.browser.add_cookie(cookie_dict=cookie_)
def WebController(url):
    global driver
    global scan_active
    global current_state
    global thread_stop
    try:
        options = uc.ChromeOptions()
        options.add_argument('--headless')
        driver = uc.Chrome(options=options)
        #driver = uc.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe', options=options)
        driver.get("https://www.twitch.tv/popout/"+str(poll)+"/poll")
        scan_active = True
    except:
        current_state = "Webdriver Error"
Esempio n. 13
0
def iniciar():
    crome_options = uc.ChromeOptions()
    #crome_options.add_argument('--headless')
    #crome_options.add_argument(f"--window-size=800,600")
    crome_options.add_argument("--hide-scrollbars")
    crome_options.add_argument("--log-level=3")
    crome_options.add_argument('--disable-extensions')
    crome_options.add_argument('--profile-directory=Default')
    crome_options.add_argument("--incognito")
    crome_options.add_argument("--disable-plugins-discovery");

    driver = webdriver.Chrome(r'./chromedriver.exe', options=crome_options)
    #chrome.delete_all_cookies()
    return driver
Esempio n. 14
0
def WebController(url):
    global driver
    global scan_active
    global current_state
    global thread_stop
    try:
        options = uc.ChromeOptions()
        driver = uc.Chrome(options=options)
        #options.add_argument('--headless')
        #driver = uc.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe', options=options)
        driver.get(url)
        scan_active = True
    except:
        current_state = "Webdriver Error"
Esempio n. 15
0
def glados(cookie_string):
    options = uc.ChromeOptions()
    options.add_argument("--disable-popup-blocking")

    version = get_driver_version()
    driver = uc.Chrome(version_main=version, options=options)

    # Load cookie
    driver.get("https://glados.rocks")

    if cookie_string.startswith("cookie:"):
        cookie_string = cookie_string[len("cookie:"):]
    cookie_dict = [{
        "name": x[:x.find('=')].strip(),
        "value": x[x.find('=') + 1:].strip()
    } for x in cookie_string.split(';')]

    driver.delete_all_cookies()
    for cookie in cookie_dict:
        if cookie["name"] in ["koa:sess", "koa:sess.sig"]:
            driver.add_cookie({
                "domain": "glados.rocks",
                "name": cookie["name"],
                "value": cookie["value"],
                "path": "/",
            })

    driver.get("https://glados.rocks")
    WebDriverWait(driver, 240).until(lambda x: x.title != "Just a moment...")

    message = str()

    checkin_code, checkin_message = glados_checkin(driver)
    if checkin_code == -2:
        checkin_message = "Login fails, please check your cookie."
    message = f"{message}【Checkin】{checkin_message}\n"
    print(f"【Checkin】{checkin_message}")

    if checkin_code != -2:
        status_code, status_data = glados_status(driver)
        left_days = int(float(status_data["leftDays"]))
        print(f"【Status】Left days:{left_days}")
        message = f"{message}【Status】Left days:{left_days}\n"

    driver.close()
    driver.quit()

    return checkin_code, message
Esempio n. 16
0
def init_webdriver(logger):
    AGENT = get_agent(logger)
    chrome_options = uc.ChromeOptions()
    chrome_options.add_argument(f"user-agent= {AGENT}")
    chrome_options.add_argument(
        '--disable-blink-features=AutomationControlled')
    #chrome_options.add_argument("--incognito")
    chrome_options.add_argument('--user-data-dir=./Configs/User_Data')
    #chrome_options.add_argument('headless')
    chrome_options.add_argument("--disable-extensions")
    chrome_options.add_argument("--disable-popup-blocking")
    chrome_options.add_experimental_option(
        "excludeSwitches", ["enable-automation", "enable-logging"])
    chrome_options.add_experimental_option('useAutomationExtension', False)

    browserdriver = uc.Chrome(options=chrome_options)

    return browserdriver
Esempio n. 17
0
def create_driver():
    system = platform.system()
    # print("SYSTEM IS: " + str(system))
    if system == 'Darwin':
        path = 'chrome_mac/chromedriver'
    elif system == 'Linux':
        path = 'chrome_linux/chromedriver'
    elif system == 'Windows':
        path = os.getcwd() + '\chrome_windows\chromedriver.exe'

    # Shoutout to the dev who created this
    use_undetected_chromedriver = True
    if use_undetected_chromedriver:
        options = uc.ChromeOptions()

        options.add_argument('--profile-directory=Profile 8')
        options.add_argument('--disable-popup-blocking')  # allow for new tab
        # options.add_extension("adblocker/uBlock-Origin.crx")

        driver = uc.Chrome(options=options)
        return driver

    else:
        options = webdriver.ChromeOptions()

        # For older ChromeDriver under version 79.0.3945.16
        options.add_argument("--ignore-certificate-error")
        options.add_argument("--ignore-ssl-errors")
        options.add_argument('--no-sandbox')
        options.add_argument('--disable-dev-shm-usage')
        options.add_experimental_option("excludeSwitches",
                                        ["enable-automation"])
        options.add_experimental_option('useAutomationExtension', False)

        # Stop annoying windows logs
        options.add_argument('--disable-logging')
        options.add_argument("--log-level=3")

        driver = webdriver.Chrome(executable_path=path, options=options)

        return driver
Esempio n. 18
0
    def scrape(self):
        """Scrape all urls of self.sections."""
        print("Start scraping...")
        options = uc.ChromeOptions()
        options.headless = True
        options.add_argument('--headless')
        chrome = uc.Chrome(options=options)

        length = len(self.sections)
        for i, section in enumerate(self.sections):
            print(section.url)
            try:
                chrome.get(section.url)
                html = chrome.page_source
                section.scrape(html)
            except Exception as e:
                print("Get page source error!")
                print(e)

            if i != length - 1:
                time.sleep(5)

        chrome.quit()
Esempio n. 19
0
    def __init__(self,
                 showWindow=True,
                 proxy=None,
                 downloadPath: str = None,
                 add_arguments=None,
                 window_size=None,
                 driver_path="",
                 seleniumwire_options=None,
                 driver=None):
        add_arguments = add_arguments or []
        if seleniumwire_options is not None:
            # import seleniumwire
            # import seleniumwire.webdriver
            import seleniumwire.undetected_chromedriver.v2  # import Chrome, ChromeOptions
            # import seleniumwire.undetected_chromedriver # import Chrome, ChromeOptions
            options = seleniumwire.undetected_chromedriver.v2.ChromeOptions()
            # options = seleniumwire.webdriver.ChromeOptions()
        else:
            if driver is not None:
                options = driver.ChromeOptions()
            else:
                options = webdriver.ChromeOptions()
        # options.add_argument("--disable-dev-shm-usage")
        # options.add_argument("--no-sandbox")
        # options.add_experimental_option("prefs", {
        # "profile.default_content_setting_values.notifications": 1
        # })
        for arg in add_arguments:
            options.add_argument(arg)
        if downloadPath is not None and isinstance(downloadPath, str):
            absolutePath = os.path.abspath(downloadPath)
            if (not os.path.isdir(absolutePath)):
                raise FileNotFoundError(errno.ENOENT,
                                        os.strerror(errno.ENOENT),
                                        absolutePath)

            options.add_experimental_option(
                'prefs', {'download.default_directory': absolutePath})

        if proxy is not None and isinstance(proxy, str):
            options.add_argument("--proxy-server={}".format(proxy))

        if not showWindow:
            options.headless = True
            options.add_argument("--headless")

        driverfilename = ''
        if sys.platform == 'linux' or sys.platform == 'linux2':
            driverfilename = 'chrome_linux'
            if showWindow and not os.environ.get("DISPLAY", ""):
                raise Exception(
                    "DISPLAY variable not set and non-headless mode requested")
        elif sys.platform == 'win32':
            driverfilename = 'chrome_windows.exe'
        elif sys.platform == 'darwin':
            driverfilename = 'chrome_mac'

        if driver_path:
            driverpath = driver_path
        else:
            driverpath = os.path.join(
                os.path.split(__file__)[0],
                'drivers{0}{1}'.format(os.path.sep, driverfilename))
            os.chmod(driverpath, 0o755)

        if seleniumwire_options is not None:
            import seleniumwire.undetected_chromedriver.v2  # import Chrome, ChromeOptions
            # import seleniumwire.undetected_chromedriver # import Chrome, ChromeOptions
            # import seleniumwire.webdriver
            # import seleniumwire.webdriver
            self.driver = seleniumwire.undetected_chromedriver.v2.Chrome(
                # self.driver = seleniumwire.undetected_chromedriver.Chrome(
                executable_path=driverpath,
                options=options,
                seleniumwire_options=seleniumwire_options)
            # self.driver = seleniumwire.webdriver.Chrome(executable_path=driverpath, options=options,
            # seleniumwire_options=seleniumwire_options)
        elif driver is None:
            self.driver = webdriver.Chrome(executable_path=driverpath,
                                           options=options)
        elif driver is not None:
            options.add_argument(f'--proxy-server=socks5://127.0.0.1:9050')
            self.driver = driver.Chrome(options=options)
        else:
            raise NotImplementedError("Options combination is not implemented")

        if window_size:
            self.driver.set_window_size(*window_size)
        self.Key = Keys
        self.errors = []

        [
            setattr(self, function, getattr(self.driver, function))
            for function in [
                'add_cookie', 'delete_all_cookies', 'delete_cookie',
                'execute_script', 'execute_async_script', 'fullscreen_window',
                'get_cookie', 'get_cookies', 'get_log',
                'get_network_conditions', 'get_screenshot_as_base64',
                'get_screenshot_as_file', 'get_screenshot_as_png',
                'get_window_position', 'get_window_rect', 'get_window_size',
                'maximize_window', 'minimize_window', 'implicitly_wait',
                'quit', 'refresh', 'save_screenshot', 'set_network_conditions',
                'set_page_load_timeout', 'set_script_timeout',
                'set_window_position', 'set_window_rect', 'start_client',
                'start_session', 'stop_client', 'switch_to_alert'
            ]
        ]
Esempio n. 20
0
import datetime
import pyfiglet as f
import undetected_chromedriver as UC
import pickle
import account as ac

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import *
from fake_useragent import UserAgent

UC.TARGET_VERSION = 87  # You can change your chrome version target

options = UC.ChromeOptions()
hl = input("Headless / Normal")
if hl == "Headless":
    options.headless = True
    options.add_argument("--headless")
else:
    options.headless = False
    options.add_argument("start-maximized")
# Add proxy to become more invisible
server = input("Proxy / Socks5 / None : ")
if server.lower == "proxy":
    proxy = input("Masukan proxy : ")
    options.add_argument(f'--proxy-server={proxy}')
elif server.lower == "socks5":
    socks5 = input("Masukan socks5 : ")
    options.add_argument(f'--proxy-server=socks5://{socks5}')
Esempio n. 21
0
def browser(asef, passwd, selection_month, selection_day, email, proxy):
    # uc.TARGET_VERSION = 78
    options = uc.ChromeOptions()
    #ua = UserAgent()
    #userAgent = ua.random
    #print(userAgent)
    #options.add_argument(f'user-agent={userAgent}')
    options.add_argument('--proxy-server=' + str(proxy))
    print('Proxy: ' + str(proxy))
    options.add_extension("./extensions/buster_chrome.crx")
    options.add_extension("./extensions/xpather.crx")
    # options.add_argument("--headless")
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument("--enable-features=ReaderMode")

    prefs = {
        "profile.managed_default_content_settings.images": 2,
        "profile.default_content_setting_values.notifications": 2,
        "profile.managed_default_content_settings.stylesheets": 2,
        "profile.managed_default_content_settings.cookies": 2,
        "profile.managed_default_content_settings.javascript": 1,
        "profile.managed_default_content_settings.plugins": 1,
        "profile.managed_default_content_settings.popups": 2,
        "profile.managed_default_content_settings.geolocation": 2,
        "profile.managed_default_content_settings.media_stream": 2,
    }
    prefs1 = {"profile.managed_default_content_settings.images": 2}

    options.add_experimental_option("prefs", prefs)

    options.binary_location = r"C:\Program Files (x86)\BraveSoftware\Brave-Browser\Application\brave.exe"
    chrome_driver_binary = "./selenium"

    driver = uc.Chrome(chrome_options=options)

    driver.execute_script(
        "Object.defineProperty(navigator, 'webdriver', {get: () => false})")
    driver.set_page_load_timeout(60)
    for i in range(2):
        try:
            driver.get("https://discord.com/register")
            navigation_start = driver.execute_script(
                "return window.performance.timing.navigationStart")
            dom_complete = driver.execute_script(
                "return window.performance.timing.domComplete")
            waittime = int(round(dom_complete - navigation_start)) / 1000
            print("Time to connect & load the Discord page: " + str(waittime))
            #            driver.execute_script("window.open('https://www.yinsiduanxin.com/mail.html')")
            #            driver.switch_to.window(driver.window_handles[1])
            break
        except:
            print("failed to connect")
            driver.quit()

#    driver.find_element_by_xpath("//button[contains(string(), '随机邮箱')]").click()
#    time.sleep(0.5)
#    emaill = driver.find_element_by_xpath("//span[contains(string(), '@mailscode.com')]").text

    driver.switch_to.window(driver.window_handles[0])
    sleeptime = int(500) / 1000
    try:
        enter_searchbar = driver.find_element_by_name("email")
        enter_searchbar.send_keys(email)  #l)
        time.sleep(sleeptime)
        enter_user = driver.find_element_by_name("username")
        enter_user.send_keys(asef)
        time.sleep(sleeptime)
        enter_passwd = driver.find_element_by_name("password")
        enter_passwd.send_keys(passwd)
        time.sleep(sleeptime)
        enter_month = driver.find_element_by_id("react-select-2-input")
        enter_month.send_keys(selection_month, Keys.ENTER)
        time.sleep(sleeptime)
        enter_day = driver.find_element_by_id("react-select-3-input")
        enter_day.send_keys(selection_day, Keys.ENTER)
        time.sleep(sleeptime)
        enter_year = driver.find_element_by_id("react-select-4-input")
        enter_year.send_keys(random.randint(1988, 1997), Keys.ENTER)
        time.sleep(sleeptime)
        driver.find_element_by_xpath("//button[@type='submit']").click()
        time.sleep(sleeptime)
    except:
        print("Value input failed due to unloaded elements.")
        driver.quit()

    try:
        driver.find_element_by_xpath(
            "//div[contains(string(), 'Email is already registered')]"
        ).is_displayed()
        email = emails()
        enter_searchbar = driver.find_element_by_name("email")
        enter_searchbar.clear()
        enter_searchbar.send_keys(email)
        time.sleep(sleeptime)
        driver.find_element_by_xpath("//button[@type='submit']").click()
    except:
        print("Email was not used before.")

    try:
        driver.find_element_by_xpath(
            "//span[contains(string(), 'Password is too weak or common to use')]"
        )
        enter_passwd = driver.find_element_by_name("password")
        enter_passwd.send_keys("321!@#")
        time.sleep(sleeptime)
        driver.find_element_by_xpath("//button[@type='submit']").click()
    except:
        print("Password was strong enough.")

    try:
        driver.find_element_by_xpath(
            "//div[contains(string(), 'You are being rate limited')]"
        ).is_displayed()
        result = ratelimit()
        if "429" in str(result[0]):
            print("Ratelimited for " + str(round(result[1]['retry_after'])) +
                  " seconds. Waiting until that is over.")
            time.sleep(int(round(result[1]['retry_after'])))
            driver.find_element_by_xpath("//button[@type='submit']").click()
    except:
        print("Registration was not ratelimited.")

    wait = WebDriverWait(driver, 300)
    wait.until(
        EC.frame_to_be_available_and_switch_to_it(
            (By.XPATH, "//iframe[attribute::*[contains(name(), 'a')]]")))
    #wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name^='a-']")))
    wait.until(EC.element_to_be_clickable((By.ID, "recaptcha-anchor"))).click()

    time.sleep(2)

    for _ in range(10):
        actions = ActionChains(driver)
        actions.send_keys(Keys.TAB + " ")
        actions.perform()
        time.sleep(5)
        try:
            #wait = WebDriverWait(driver, 3)
            #wait.until(EC.presence_of_element_located(By.XPATH, "/html/body/div/div/div[1]"))
            driver.find_element_by_xpath(
                "//iframe[attribute::*[contains(name(), 'a')]]/html/body/div/div/div[1]"
            )
            print("Multiple captcha solving needed.")
        except:
            print("breaking")
            break

#    try:
#        wait = WebDriverWait(driver, 30)
#        wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[name^='a-']")))
#        wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='rc-audiochallenge-error-message']")))
#        print("succeeded.")
#    except:
#        print("passed")

    wait = WebDriverWait(driver, 600)
    desired_url = "https://discord.com/channels/@me"
    wait.until(lambda driver: driver.current_url == desired_url)
    time.sleep(3)
    try:
        driver.find_element_by_xpath("//h2[contains(string(), 'Add Friend')]")
        print("Token works fine.")
    except:
        print("We have been either email or phone-locked.")


#    driver.switch_to.window(driver.window_handles[1])
#    time.sleep(2)
#    driver.find_element_by_xpath("//button[contains(string(), '接收邮件')]").click()
#    time.sleep(2)
#    driver.find_element_by_xpath("//td[contains(string(), 'Discord')]").click()
#    time.sleep(2)
#    driver.find_element_by_xpath("//a[contains(string(), 'Verify Email')]").click()
    driver.quit()
Esempio n. 22
0
# https://github.com/ultrafunkamsterdam/undetected-chromedriver
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By

options = uc.ChromeOptions()
options.headless=True
driver = uc.Chrome(options=options)

url = "https://antoinevastel.com"
driver.get(url)

user_agent = driver.execute_script("return navigator.userAgent")
print("User-Agent: {}".format(user_agent))
# Legit user-agent, doesn't contain "HeadlessChrome":
# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36

has_webdriver = driver.execute_script("return !!navigator.webdriver")
print("Has webdriver: {}".format(has_webdriver))
# No webdriver

articles = []
a_elts = driver.find_elements(By.CSS_SELECTOR, 'article a')
for a_elt in a_elts:
    articles.append({
        'title': a_elt.text,
        'url': a_elt.get_attribute("href")
    })

print(articles)
# [{'title': 'Equivalent of Promise.map (Bluebird) in Python', 'url': 'https://antoinevastel.com/python/2021/03/13/promise-map-python.html'}, {'title': 'A common mistake while monitoring HTTP responses with Puppeteer', 'url': 'https://antoinevastel.com/puppeteer/2021/01/23/instrumenting-requests-puppeteer-bug.html'}, {'title': "Analyzing Recent's Magento 1 Credit Card Skimmer", 'url': 'https://antoinevastel.com/fraud/2020/09/20/analyzing-magento-skimmer.html'}, {'title': 'Creating a simple ExpressJS middleware to detect bots', 'url': 'https://antoinevastel.com/bot/2020/05/10/express-middleware-bot.html'}, {'title': 'Bot detection 101: How to detect web bots?', 'url': 'https://antoinevastel.com/javascript/2020/02/09/detecting-web-bots.html'}, {'title': 'Bot detection 101: Categories of web bots', 'url': 'https://antoinevastel.com/crawler/2019/12/29/families-web-bots.html'}, {'title': 'Benchmarking our JavaScript obfuscator', 'url': 'https://antoinevastel.com/javascript/2019/09/10/benchmarking-obfuscator.html'}, {'title': 'Improving our homemade JavaScript obfuscator', 'url': 'https://antoinevastel.com/javascript/2019/09/09/improving-obfuscator.html'}, {'title': 'A simple homemade JavaScript obfuscator', 'url': 'https://antoinevastel.com/javascript/2019/09/04/home-made-obfuscator.html'}, {'title': 'The Intriguing Sneaker Bot industry', 'url': 'https://antoinevastel.com/javascript/2019/08/31/sneakers-supreme-bots.html'}]
Esempio n. 23
0
def browser(user, passwd, selection_month, selection_day, email, proxy):
    # uc.TARGET_VERSION = 78
    options = uc.ChromeOptions()
    ua = UserAgent()
    userAgent = ua.random
    #print(userAgent)
    options.add_argument(f'user-agent={userAgent}')
    options.add_argument("--proxy-server=socks5://" + str(proxy))
    options.add_argument(
        "--host-resolver-rules=\"MAP * ~NOTFOUND , EXCLUDE myproxy\"")
    print('Proxy: ' + str(proxy))
    options.add_extension("./extensions/buster_chrome.crx")
    options.add_extension("./extensions/xpather.crx")
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument("--enable-features=ReaderMode")
    options.add_argument('--ignore-ssl-errors=yes')
    options.add_argument('--ignore-certificate-errors')

    # Stricter preferences.
    prefs = {
        "profile.managed_default_content_settings.images": 2,
        "profile.default_content_setting_values.notifications": 2,
        "profile.managed_default_content_settings.stylesheets": 2,
        "profile.managed_default_content_settings.cookies": 2,
        "profile.managed_default_content_settings.javascript": 1,
        "profile.managed_default_content_settings.plugins": 1,
        "profile.managed_default_content_settings.popups": 2,
        "profile.managed_default_content_settings.geolocation": 2,
        "profile.managed_default_content_settings.media_stream": 2,
    }

    prefs1 = {
        "profile.managed_default_content_settings.images": 1,
        "profile.managed_default_content_settings.popups": 2,
        "profile.default_content_setting_values.notifications": 2,
        "profile.managed_default_content_settings.geolocation": 2,
        "profile.managed_default_content_settings.stylesheets": 2,
    }

    options.add_experimental_option("prefs", prefs1)

    options.binary_location = binary_path

    driver = uc.Chrome(chrome_options=options)
    driver.execute_script(
        "Object.defineProperty(navigator, 'webdriver', {get: () => false})")
    driver.set_page_load_timeout(120)

    try:
        driver.get('https://www.yinsiduanxin.com/mail.html')
        navigation_start = driver.execute_script(
            "return window.performance.timing.navigationStart")
        dom_complete = driver.execute_script(
            "return window.performance.timing.domComplete")
        driver.execute_script("window.open('https://discord.com/register')")
        waittime = int(round(dom_complete - navigation_start)) / 1000
        print("Time to connect & load the Discord page: " + str(waittime))
    except Exception as e:
        print("failed to connect\nException: " + str(e))
        proxy_cleaner(proxy)
        driver.quit()
        return "Did not load page.", "Did not get token."

    try:
        wait = WebDriverWait(driver, 10)
        wait.until(
            EC.presence_of_element_located(
                (By.XPATH, "//button[contains(string(), '随机邮箱')]"))).click()
    except Exception as e:
        print("Proxy error: " + str(e))
        proxy_cleaner(proxy)
        driver.quit()
        return "Did not load page.", "Did not get token."

    wait = WebDriverWait(driver, 30)
    emaill = wait.until(
        EC.presence_of_element_located(
            (By.XPATH, "//span[contains(string(), '@mailscode.com')]"))).text

    driver.switch_to.window(driver.window_handles[1])
    sleeptime = int(500) / 1000
    try:
        wait = WebDriverWait(driver, 30)
        enter_searchbar = wait.until(
            EC.presence_of_element_located((By.NAME, "email")))
        enter_searchbar.send_keys(emaill)
        time.sleep(sleeptime)
        enter_user = driver.find_element_by_name("username")
        enter_user.send_keys(user)
        time.sleep(sleeptime)
        enter_passwd = driver.find_element_by_name("password")
        enter_passwd.send_keys(passwd)
        time.sleep(sleeptime)
        enter_month = driver.find_element_by_id("react-select-2-input")
        enter_month.send_keys(selection_month, Keys.ENTER)
        time.sleep(sleeptime)
        enter_day = driver.find_element_by_id("react-select-3-input")
        enter_day.send_keys(selection_day, Keys.ENTER)
        time.sleep(sleeptime)
        enter_year = driver.find_element_by_id("react-select-4-input")
        enter_year.send_keys(random.randint(1988, 1997), Keys.ENTER)
        time.sleep(sleeptime)
        try:
            driver.find_element_by_xpath("//input[@type='checkbox']").click()
        except:
            pass
        driver.find_element_by_xpath("//button[@type='submit']").click()
    except Exception as e:
        print("Value input failed due to unloaded elements. \nError: " +
              str(e))
        proxy_cleaner(proxy)
        driver.quit()
        return "Did not load page.", "Did not grab token."
    time.sleep(1)
    try:
        # randomly stops working for some reason, this is just a check.
        driver.find_element_by_xpath("//button[@type='submit']").click()
    except:
        pass

    try:
        driver.find_element_by_xpath(
            "//span[contains(string(), 'Password is too weak or common to use')]"
        )
        enter_passwd = driver.find_element_by_name("password")
        passwd = passwd + "321!@#"
        enter_passwd.send_keys("321!@#")
        time.sleep(sleeptime)
        driver.find_element_by_xpath("//button[@type='submit']").click()
        print("Fixed password being too short.")
    except Exception as e:
        print("Password was strong enough.")  # \nError: " + str(e))

    try:
        driver.find_element_by_xpath(
            "//div[contains(string(), 'You are being rate limited.')]"
        ).is_displayed()
        result = ratelimit()
        if "429" in str(result[1]):
            print("Ratelimited for " + str(round(result[1]['retry_after'])) +
                  " seconds. Waiting until that is over.")
            time.sleep(int(round(result[1]['retry_after'])))
            driver.find_element_by_xpath("//button[@type='submit']").click()
        print(result[0] + " " + result[1])
    except Exception as e:
        print("Registration was not ratelimited.")  # \nError: " + str(e))

    try:
        wait = WebDriverWait(driver, 30)
        wait.until(
            EC.frame_to_be_available_and_switch_to_it(
                (By.CSS_SELECTOR, "iframe[name^='a-']")))
        wait.until(EC.element_to_be_clickable(
            (By.ID, "recaptcha-anchor"))).click()
        time.sleep(2)
    except Exception as e:
        print("Could not find captcha. \nError: " + str(e))
        proxy_cleaner(proxy)
        driver.quit()
        return "Did not load page.", "Did not grab token."

    actions = ActionChains(driver)
    actions.send_keys(Keys.TAB + " ")
    actions.perform()

    while True:
        try:
            wait = WebDriverWait(driver, 8)
            desired_url = "https://discord.com/channels/@me"
            wait.until(lambda driver: driver.current_url == desired_url)
            break
        except:
            pass
    #            try:
    #                wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//div//iframe[@title='recaptcha challenge']")))
    #            except Exception as e:
    #                print(str(e))
    #            actions = ActionChains(driver)
    #            actions.send_keys(Keys.TAB + Keys.TAB + Keys.TAB + " ")
    #            print("first:")
    #            time.sleep(5)
    #            actions.send_keys(Keys.TAB + Keys.TAB + " ")
    #            print("second")
    #            actions.perform()

    #    try:
    #        wait = WebDriverWait(driver, 30)
    #        wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[name^='a-']")))
    #        wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='rc-audiochallenge-error-message']")))
    #        print("succeeded.")
    #    except:
    #        print("passed")

    #    wait = WebDriverWait(driver, 600)
    #    desired_url = "https://discord.com/channels/@me"
    #    wait.until(lambda driver: driver.current_url == desired_url)
    #    print("Captcha passed.")

    driver.delete_all_cookies()
    driver.switch_to.window(driver.window_handles[0])
    time.sleep(1)
    wait = WebDriverWait(driver, 20)
    driver.find_element_by_xpath(
        "//button[contains(string(), '接收邮件')]").click()
    time.sleep(0.5)
    wait.until(
        EC.element_to_be_clickable(
            (By.XPATH, "//td[contains(string(), 'Discord')]"))).click()
    time.sleep(0.5)
    driver.find_element_by_xpath(
        "//a[contains(string(), 'Verify Email')]").click()
    driver.switch_to.window(driver.window_handles[2])
    try:
        wait = WebDriverWait(driver, 3)
        wait.until(
            EC.frame_to_be_available_and_switch_to_it(
                (By.CSS_SELECTOR, "iframe[name^='a-']")))
        wait.until(EC.element_to_be_clickable(
            (By.ID, "recaptcha-anchor"))).click()
        time.sleep(2)
        driver.switch_to.default_content
        actions = ActionChains(driver)
        actions.send_keys(Keys.TAB + " ")
        actions.perform()
    except:
        pass

    try:
        wait = WebDriverWait(driver, 60)
        wait.until(
            EC.element_to_be_clickable((By.XPATH, "//button[@type='button']")))
        print("Second captcha solved.")
    except:
        print("Could not find the button.")
    time.sleep(0.5)
    #    driver.switch_to.window(driver.window_handles[2])
    #    try:
    #        driver.find_element_by_xpath("//h2[contains(string(), 'Add Friend')]")
    #        print("Token works fine.")
    #    except Exception as e:
    #        print("We have been either email or phone-locked.\n" + str(e))
    file1 = open("results/verifiedaccs.txt", "a+")
    file1.write("\n\nUsername: {}".format(user))
    file1.write("\nEmail: {}".format(emaill))
    file1.write("\nPassword: {}".format(passwd))
    token = gettoken(driver)
    print("Result: " + str(token))
    file1.write("\nToken: {}".format(token))
    #if int(waittime) < 5:
    #    with open("config/fastwork.txt", "a+") as file2:
    #        if str(proxy).strip("\n") not in file2.readlines():
    #            file2.write("{}\n".format(proxy))
    #elif int(waittime) < 10:
    #    with open("config/medwork.txt", "a+") as file3:
    #        if str(proxy).strip("\n") not in file3.readlines():
    #            file3.write("{}\n".format(proxy))

    return emaill, token
Esempio n. 24
0
    def __init__(self, chrome_path=None, verbose=False, chrome_version=None):
        self.chrome_path = chrome_path
        self.verbose = verbose
        self.pid = {}
        self.driver = None
        self.ready = False
        self.wanted_url = None
        self.time_last_cookie_dump = time.monotonic()

        # Initialize Chrome & load the cookie store
        logger = logging.getLogger(name="ProxiedBrowser(init)")

        service_log_path = './chrome_service_log.log' if self.verbose else os.devnull

        options = uc.ChromeOptions()
        options.add_argument(
            '--no-first-run --no-service-autorun --password-store=basic')

        if self.chrome_path is not None:
            logger.debug('Forcing binary path to %s', chrome_path)
            options.binary_location = self.chrome_path

        try:
            self.driver = driver = uc.Chrome(service_log_path=service_log_path,
                                             options=options,
                                             version_main=chrome_version)
        except urllib.error.HTTPError as e:
            logger.error('Downloading chromedriver %i failed: %s',
                         chrome_version, str(e))
            raise e

        except Exception as e:
            logger.error("Failed to initialize Chrome: %s", str(e))
            raise e

        # Store Chrome' pid for last ressort cleanup
        self.pid['chromedriver'] = driver.service.process.pid
        self.pid['chrome'] = driver.browser_pid

        logger.info(
            'chromedriver version ' + colorama.Style.BRIGHT + '%s' +
            colorama.Style.RESET_ALL + ' running as pid ' +
            colorama.Style.BRIGHT + '%i' + colorama.Style.RESET_ALL +
            ' driving Chrome version ' + colorama.Style.BRIGHT + '%s' +
            colorama.Style.RESET_ALL + ' running as pid ' +
            colorama.Style.BRIGHT + '%i' + colorama.Style.RESET_ALL,
            driver.capabilities['chrome']['chromedriverVersion'],
            self.pid['chromedriver'], driver.capabilities['browserVersion'],
            self.pid['chrome'])

        try:
            driver.get('chrome://version')
        except Exception as e:
            logger.critical(
                'Cannot navigate to internal page. Something is REALLY broken; %s',
                str(e))
            raise e

        cookies = list()
        logger.info('Trying to load existing cookie...')
        try:
            with open(cookie_store, 'r') as cookie_file:
                cookies = json.load(codecs.getwriter('utf-8')(cookie_file))
        except:
            logger.debug('No cookie to import...')
        else:
            for cookie in cookies:
                prefix = "http://"
                if cookie['domain'].startswith('.'):
                    prefix = "http://www"
                if cookie['domain'].startswith('.www.'):  #Yes, it happened...
                    prefix = "http://"
                    cookie['domain'] = cookie['domain'].replace(
                        '.www.', 'www.')

                driver.get('{}{}'.format(prefix, cookie['domain']))
                if 'sameSite' in cookie:
                    if cookie['sameSite'] == 'None':
                        cookie['sameSite'] = 'Strict'
                driver.add_cookie(cookie)
            logger.debug('Added %i cookie(s)', len(cookies))

        self.ready = True
Esempio n. 25
0
def main(username, password, users_list, comments_list):
    # with open('./backend/static/instabot/lists/usragents.txt') as f:
    #     USER_AGENT_PARTS = f.readlines()
    # with open('./lists/usragents.txt') as f:
    #     USER_AGENT_PARTS = f.readlines()

    opts = uc.ChromeOptions()
    opts.add_argument('--headless')
    opts.add_argument('--disable-gpu')
    opts.add_argument('--no-sandbox')
    opts.add_argument('--disable-dev-shm-usage')
    opts.add_argument('--remote-debugging-port=9222')

    base_url = 'https://www.instagram.com'
    print("got before")
    driver = uc.Chrome(options=opts)
    print("got after")
    # driver = uc.Chrome()
    opts.add_argument("--example-flag")
    driver.get(base_url)
    wait_random(3, 6)

    try:
        cookie_div = driver.find_element_by_class_name("mt3GC")
        cookie_btn = cookie_div.find_elements_by_tag_name('button')[0]
        wait_random(3, 6)
        cookie_btn.click()
        print("got after cookie btn")
    except NoSuchElementException as e:
        pass

    login_form = driver.find_element_by_id('loginForm')
    form_usr = login_form.find_elements_by_tag_name('label')[0]
    form_pass = login_form.find_elements_by_tag_name('label')[1]

    write(form_usr, username)
    wait_random(1, 3)
    print("got after username")

    write(form_pass, password)
    wait_random(1, 4)
    print("got after password")

    form_pass.send_keys(Keys.ENTER)
    wait_random(4, 8)

    try:
        save_login = driver.find_element_by_class_name("cmbtv")
        save_login.click()
        wait_random(2, 4)
        print("got after savelogin")
    except NoSuchElementException:
        pass

    try:
        notifications_div = driver.find_element_by_class_name("mt3GC")
        notifications_btn = notifications_div.find_elements_by_tag_name('button')[1]
        wait_random(2, 4)
        notifications_btn.click()
        print("got after notifbtn")
    except NoSuchElementException:
        pass

    wait_random(2, 7)

    # if len(users_list) > len(comments_list):
    #     diff = len(users_list) - len(comments_list)
    #     comments_list.extend(comments_list[:diff])

    for user, comm in zip(users_list, comments_list):
        try:
            driver.get(base_url + '/' + user + '/')
            wait_random(2, 5)

            article_holder = driver.find_element_by_class_name('ySN3v')
            first_photo_link = article_holder.find_element_by_tag_name('a')
            driver.get(first_photo_link.get_attribute('href'))
            wait_random(3, 5)

            like_div = driver.find_element_by_class_name('eo2As')
            like_btn, comm_btn = like_div.find_elements_by_tag_name('button')[:2]
            like_svg = like_btn.find_element_by_tag_name('svg')
            print(like_svg.get_attribute('fill'))
            if like_svg.get_attribute('fill') != '#ed4956':
                like_svg.click()
                print('liked')

            wait_random(2, 6)
            print("got after like")

            comm_btn.click()
            wait_random(1, 2)

            comm_form = driver.find_element_by_class_name('RxpZH').find_element_by_tag_name('form')
            comm_text = comm_form.find_element_by_tag_name('textarea')

            write(comm_text, comm)
            comm_text.send_keys(Keys.ENTER)
            wait_random(2, 4)
            print("got after user")
        except NoSuchElementException:
            pass
        except WebDriverException:
            pass
        wait_random(5, 10)

    driver.close()
Esempio n. 26
0
 def __init__(self, **kwargs):
     super().__init__()
     option = uc.ChromeOptions()
     # option.add_argument('--headless')
     option.add_argument("--start-maximized")
     self.browser = uc.Chrome(options=option)
Esempio n. 27
0
 def __init__(self):
     self.options = uc.ChromeOptions()
     self.options.headless = True
     self.options.add_argument('--headless')
     self.driver = uc.Chrome(options=self.options)
Esempio n. 28
0
def test():
    import sys, os

    sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
    import undetected_chromedriver as uc
    import threading

    def collector(
            driver: uc.Chrome,
            stop_event: threading.Event,
            on_event_coro: Optional[Callable[[List[str]],
                                             Awaitable[Any]]] = None,
            listen_events: Sequence = ("browser", "network", "performance"),
    ):
        def threaded(driver, stop_event, on_event_coro):
            async def _ensure_service_started():
                while (getattr(driver, "service", False)
                       and getattr(driver.service, "process", False)
                       and driver.service.process.poll()):
                    print("waiting for driver service to come back on")
                    await asyncio.sleep(0.05)
                    # await asyncio.sleep(driver._delay or .25)

            async def get_log_lines(typ):
                await _ensure_service_started()
                return driver.get_log(typ)

            async def looper():
                while not stop_event.is_set():
                    log_lines = []
                    try:
                        for _ in listen_events:
                            try:
                                log_lines += await get_log_lines(_)
                            except:
                                if logging.getLogger().getEffectiveLevel(
                                ) <= 10:
                                    traceback.print_exc()
                                continue
                        if log_lines and on_event_coro:
                            await on_event_coro(log_lines)
                    except Exception as e:
                        if logging.getLogger().getEffectiveLevel() <= 10:
                            traceback.print_exc()

            loop = asyncio.new_event_loop()
            asyncio.set_event_loop(loop)
            loop.run_until_complete(looper())

        t = threading.Thread(target=threaded,
                             args=(driver, stop_event, on_event_coro))
        t.start()

    async def on_event(data):
        print("on_event")
        print("data:", data)

    def func_called(fn):
        def wrapped(*args, **kwargs):
            print("func called! %s  (args: %s, kwargs: %s)" %
                  (fn.__name__, args, kwargs))
            while driver.service.process and driver.service.process.poll(
            ) is not None:
                time.sleep(0.1)
            res = fn(*args, **kwargs)
            print("func completed! (result: %s)" % res)
            return res

        return wrapped

    logging.basicConfig(level=10)

    options = uc.ChromeOptions()
    options.set_capability("goog:loggingPrefs", {
        "performance": "ALL",
        "browser": "ALL",
        "network": "ALL"
    })

    driver = uc.Chrome(version_main=96, options=options)

    # driver.command_executor._request = timeout(seconds=1)(driver.command_executor._request)
    driver.command_executor._request = func_called(
        driver.command_executor._request)
    collector_stop = threading.Event()
    collector(driver, collector_stop, on_event)

    driver.get("https://nowsecure.nl")

    time.sleep(10)

    driver.quit()
Esempio n. 29
0
def browser(proxy):
    global workers
    # email = accountinfo.get_email()
    # if not email:
    #     workers -= 1
    #     return

    options = uc.ChromeOptions()
    ua = UserAgent()
    userAgent = ua.chrome
    options.add_argument(f'user-agent={userAgent}')
    #options.add_argument("--headless")
    options.add_argument("--proxy-server={}://{}".format(proxyType, proxy))
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument("--enable-features=ReaderMode")
    options.add_argument('--ignore-ssl-errors=yes')
    options.add_argument('--ignore-certificate-errors')

    prefs1 = {
        "profile.managed_default_content_settings.images": 1,
        "profile.managed_default_content_settings.popups": 2,
        "profile.default_content_setting_values.notifications": 2,
        "profile.managed_default_content_settings.geolocation": 2,
        "profile.managed_default_content_settings.stylesheets": 2,
    }

    options.add_experimental_option("prefs", prefs1)

    options.binary_location = r"C:\Program Files (x86)\BraveSoftware\Brave-Browser\Application\brave.exe"
    try:
        driver = uc.Chrome(chrome_options=options)

        stealth(
            driver,
            languages=["en-US", "en"],
            user_agent=userAgent,
            vendor="Google Inc.",
            platform="Win32",
            webgl_vendor="Intel Inc.",
            renderer="Intel Iris OpenGL Engine",
            fix_hairline=True,
        )

        url = "https://discord.com/register"
        #url = "https://accounts.google.com/signin/v2/identifier?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3Dhttps%253A%252F%252Fwww.youtube.com%252F&hl=en&ec=65620&flowName=GlifWebSignIn&flowEntry=ServiceLogin"
        try:
            driver.get(url)
        except WebDriverException:
            workers -= 1
            driver.quit()
            return

        Thread(target=await_tab, args=(driver, ), daemon=True).start()
        sleeptime = 0.4

        email = "testing1234crazytown{}@gmail.com".format(
            random.randint(0, 100000))
        username = "******".format(random.randint(0, 100000))
        password = "******"
        selection_month = random.choice([
            'December', 'January', 'February', 'March', 'April', 'May', 'June',
            'July', 'August', 'September', 'October', 'November'
        ])
        selection_day = random.randint(1, 28)

        try:
            wait = WebDriverWait(driver, 30)

            enter_searchbar = wait.until(
                EC.presence_of_element_located((By.NAME, "email")))
            slow_typing(enter_searchbar, email, 20)
            time.sleep(sleeptime)

            enter_user = driver.find_element_by_name("username")
            slow_typing(enter_user, username, 20)
            time.sleep(sleeptime)

            enter_password = driver.find_element_by_name("password")
            slow_typing(enter_password, password, 20)
            time.sleep(sleeptime)

            enter_month = driver.find_element_by_id("react-select-2-input")
            slow_typing(enter_month, selection_month, 20)
            enter_month.send_keys(Keys.ENTER)
            time.sleep(sleeptime)

            enter_day = driver.find_element_by_id("react-select-3-input")
            slow_typing(enter_day, selection_day, 20)
            enter_day.send_keys(Keys.ENTER)
            time.sleep(sleeptime)

            enter_year = driver.find_element_by_id("react-select-4-input")
            slow_typing(enter_year, random.randint(1988, 1997), 20)
            enter_year.send_keys(Keys.ENTER)
            time.sleep(sleeptime)

            try:
                driver.find_element_by_xpath(
                    "//input[@type='checkbox']").click()
            except Exception:
                pass
            driver.find_element_by_xpath("//button[@type='submit']").click()
            try:
                WebDriverWait(driver, 30).until(
                    EC.frame_to_be_available_and_switch_to_it(
                        (By.XPATH, '//iframe[contains(@title, "widget")]')))
                WebDriverWait(driver, 10).until(
                    EC.element_to_be_clickable(
                        (By.CSS_SELECTOR, "div#checkbox.checkbox"))).click()
                print("Found one!")
            except Exception:
                print("failed to find iframe!")
                workers -= 1
                driver.quit()
                return

        except Exception as e:
            print(e)
    except Exception as e:
        print(e)
    time.sleep(30)
    workers -= 1
    driver.quit()
    return