Skip to content

Commit

Permalink
Improve extension loading process for chromium webdrivers
Browse files Browse the repository at this point in the history
  • Loading branch information
david96182 committed May 3, 2024
1 parent 5d3ccbd commit 19f78e7
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 38 deletions.
22 changes: 7 additions & 15 deletions ninjemail/email_providers/outlook.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,18 +54,6 @@ def create_account(captcha_key,
driver.get(f'moz-extension://{capsolver_ext_id}/www/index.html#/popup')
time.sleep(5)

api_key_input = driver.find_element(By.XPATH, '//input[@placeholder="Please input your API key"]')
api_key_input.send_keys(captcha_key)
driver.find_element(By.ID, 'q-app').click()
time.sleep(5)
elif type(driver) is webdriver.Chrome or type(driver) is uc.Chrome:
driver.get('https://www.google.com')
capsolver_src = driver.find_element(By.XPATH, '/html/script[2]')
capsolver_src = capsolver_src.get_attribute('src')
capsolver_ext_id = capsolver_src.split('/')[2]
driver.get(f'chrome-extension://{capsolver_ext_id}/www/index.html#/popup')
time.sleep(5)

api_key_input = driver.find_element(By.XPATH, '//input[@placeholder="Please input your API key"]')
api_key_input.send_keys(captcha_key)
driver.find_element(By.ID, 'q-app').click()
Expand All @@ -92,9 +80,13 @@ def create_account(captcha_key,
driver.implicitly_wait(2)

# Insert password and dismark notifications
show_password_checkbox = WebDriverWait(driver, WAIT).until(EC.presence_of_element_located((By.ID, 'ShowHidePasswordCheckbox')))
show_password_checkbox.click()
driver.find_element(By.ID, 'iOptinEmail').click()
try:
show_password_checkbox = WebDriverWait(driver, WAIT).until(EC.presence_of_element_located((By.ID, 'ShowHidePasswordCheckbox')))
show_password_checkbox.click()
time.sleep(3)
driver.find_element(By.ID, 'iOptinEmail').click()
except:
pass
driver.find_element(By.ID, 'PasswordInput').send_keys(password)
password_next = WebDriverWait(driver, WAIT).until(EC.presence_of_element_located((By.ID, 'iSignupAction')))
password_next.click()
Expand Down
16 changes: 0 additions & 16 deletions ninjemail/email_providers/yahoo.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,22 +73,6 @@ def create_account(captcha_key,
api_key_input.send_keys(captcha_key)
driver.find_element(By.ID, 'q-app').click()

# solve recaptcha by token
#token_recaptcha = driver.find_element(By.XPATH, '/html/body/div/div/div/main/div[2]/div[2]/div[1]/div[1]/div[3]/div[2]/div[1]/div[1]/span')
#token_recaptcha.click()
time.sleep(5)
elif type(driver) is webdriver.Chrome or type(driver) is uc.Chrome:
driver.get('https://www.google.com')
capsolver_src = driver.find_element(By.XPATH, '/html/script[2]')
capsolver_src = capsolver_src.get_attribute('src')
capsolver_ext_id = capsolver_src.split('/')[2]
driver.get(f'chrome-extension://{capsolver_ext_id}/www/index.html#/popup')
time.sleep(5)

api_key_input = driver.find_element(By.XPATH, '//input[@placeholder="Please input your API key"]')
api_key_input.send_keys(captcha_key)
driver.find_element(By.ID, 'q-app').click()

# solve recaptcha by token
#token_recaptcha = driver.find_element(By.XPATH, '/html/body/div/div/div/main/div[2]/div[2]/div[1]/div[1]/div[3]/div[2]/div[1]/div[1]/span')
#token_recaptcha.click()
Expand Down
4 changes: 2 additions & 2 deletions ninjemail/ninjemail_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ def create_outlook_account(self,
if use_proxy:
proxy = self.get_proxy()

driver = create_driver(self.browser, captcha_extension=True, proxy=proxy)
driver = create_driver(self.browser, captcha_extension=True, proxy=proxy, captcha_key=captcha_key)

username, password, first_name, last_name, \
country, birthdate = generate_missing_info(username, password, first_name, last_name, country, birthdate)
Expand Down Expand Up @@ -265,7 +265,7 @@ def create_yahoo_account(self,
if use_proxy:
proxy = self.get_proxy()

driver = create_driver(self.browser, captcha_extension=True, proxy=proxy)
driver = create_driver(self.browser, captcha_extension=True, proxy=proxy, captcha_key=captcha_key)

sms_key = self.get_sms_key()

Expand Down
23 changes: 18 additions & 5 deletions ninjemail/utils/webdriver_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,19 @@
import undetected_chromedriver as uc
import os
from urllib.parse import urlparse
import os
import re

def add_capsolver_api_key(file_path, api_key):
with open(file_path, 'r') as file:
content = file.read()

updated_content = re.sub(r'apiKey:\s*\'[^\']*\'', f'apiKey: \'{api_key}\'', content)

with open(file_path, 'w') as file:
file.write(updated_content)

def create_driver(browser, captcha_extension=False, proxy=None):
def create_driver(browser, captcha_extension=False, proxy=None, captcha_key=None):
"""
Create a WebDriver instance for the specified browser with optional configurations.
Expand Down Expand Up @@ -40,7 +50,7 @@ def create_driver(browser, captcha_extension=False, proxy=None):
options = FirefoxOptions()
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--headless')
#options.add_argument('--headless')
custom_profile.set_preference("intl.accept_languages", "en-us")

# proxy
Expand All @@ -67,12 +77,14 @@ def create_driver(browser, captcha_extension=False, proxy=None):
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_experimental_option('prefs', {'intl.accept_languages': 'en-us'})
options.add_argument('--headless=new')
#options.add_argument('--headless=new')
options.add_experimental_option('excludeSwitches', ['enable-logging'])
if proxy:
options.add_argument(f'--proxy-server={proxy}')
if captcha_extension:
options.add_extension(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'captcha_solvers/capsolver_captcha_solver-1.10.4.crx'))
add_capsolver_api_key(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'captcha_solvers/capsolver-chrome-extension/assets/config.js'), captcha_key)
ext_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'captcha_solvers/capsolver-chrome-extension/')
options.add_argument(f'--load-extension={ext_path}')

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)
elif browser == 'undetected-chrome':
Expand All @@ -84,10 +96,11 @@ def create_driver(browser, captcha_extension=False, proxy=None):
if proxy:
options.add_argument(f'--proxy-server={proxy}')
if captcha_extension:
add_capsolver_api_key(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'captcha_solvers/capsolver-chrome-extension/assets/config.js'), captcha_key)
ext_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'captcha_solvers/capsolver-chrome-extension/')
options.add_argument(f'--load-extension={ext_path}')

driver = uc.Chrome(options=options, headless=True, use_subprocess=False)
driver = uc.Chrome(options=options, headless=False, use_subprocess=False)
else:
raise ValueError('Unsupported browser')
return driver

0 comments on commit 19f78e7

Please sign in to comment.