Skip to content

Commit 19f78e7

Browse files
committed
Improve extension loading process for chromium webdrivers
1 parent 5d3ccbd commit 19f78e7

File tree

4 files changed

+27
-38
lines changed

4 files changed

+27
-38
lines changed

ninjemail/email_providers/outlook.py

+7-15
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,6 @@ def create_account(captcha_key,
5454
driver.get(f'moz-extension://{capsolver_ext_id}/www/index.html#/popup')
5555
time.sleep(5)
5656

57-
api_key_input = driver.find_element(By.XPATH, '//input[@placeholder="Please input your API key"]')
58-
api_key_input.send_keys(captcha_key)
59-
driver.find_element(By.ID, 'q-app').click()
60-
time.sleep(5)
61-
elif type(driver) is webdriver.Chrome or type(driver) is uc.Chrome:
62-
driver.get('https://www.google.com')
63-
capsolver_src = driver.find_element(By.XPATH, '/html/script[2]')
64-
capsolver_src = capsolver_src.get_attribute('src')
65-
capsolver_ext_id = capsolver_src.split('/')[2]
66-
driver.get(f'chrome-extension://{capsolver_ext_id}/www/index.html#/popup')
67-
time.sleep(5)
68-
6957
api_key_input = driver.find_element(By.XPATH, '//input[@placeholder="Please input your API key"]')
7058
api_key_input.send_keys(captcha_key)
7159
driver.find_element(By.ID, 'q-app').click()
@@ -92,9 +80,13 @@ def create_account(captcha_key,
9280
driver.implicitly_wait(2)
9381

9482
# Insert password and dismark notifications
95-
show_password_checkbox = WebDriverWait(driver, WAIT).until(EC.presence_of_element_located((By.ID, 'ShowHidePasswordCheckbox')))
96-
show_password_checkbox.click()
97-
driver.find_element(By.ID, 'iOptinEmail').click()
83+
try:
84+
show_password_checkbox = WebDriverWait(driver, WAIT).until(EC.presence_of_element_located((By.ID, 'ShowHidePasswordCheckbox')))
85+
show_password_checkbox.click()
86+
time.sleep(3)
87+
driver.find_element(By.ID, 'iOptinEmail').click()
88+
except:
89+
pass
9890
driver.find_element(By.ID, 'PasswordInput').send_keys(password)
9991
password_next = WebDriverWait(driver, WAIT).until(EC.presence_of_element_located((By.ID, 'iSignupAction')))
10092
password_next.click()

ninjemail/email_providers/yahoo.py

-16
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,6 @@ def create_account(captcha_key,
7373
api_key_input.send_keys(captcha_key)
7474
driver.find_element(By.ID, 'q-app').click()
7575

76-
# solve recaptcha by token
77-
#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')
78-
#token_recaptcha.click()
79-
time.sleep(5)
80-
elif type(driver) is webdriver.Chrome or type(driver) is uc.Chrome:
81-
driver.get('https://www.google.com')
82-
capsolver_src = driver.find_element(By.XPATH, '/html/script[2]')
83-
capsolver_src = capsolver_src.get_attribute('src')
84-
capsolver_ext_id = capsolver_src.split('/')[2]
85-
driver.get(f'chrome-extension://{capsolver_ext_id}/www/index.html#/popup')
86-
time.sleep(5)
87-
88-
api_key_input = driver.find_element(By.XPATH, '//input[@placeholder="Please input your API key"]')
89-
api_key_input.send_keys(captcha_key)
90-
driver.find_element(By.ID, 'q-app').click()
91-
9276
# solve recaptcha by token
9377
#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')
9478
#token_recaptcha.click()

ninjemail/ninjemail_manager.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def create_outlook_account(self,
174174
if use_proxy:
175175
proxy = self.get_proxy()
176176

177-
driver = create_driver(self.browser, captcha_extension=True, proxy=proxy)
177+
driver = create_driver(self.browser, captcha_extension=True, proxy=proxy, captcha_key=captcha_key)
178178

179179
username, password, first_name, last_name, \
180180
country, birthdate = generate_missing_info(username, password, first_name, last_name, country, birthdate)
@@ -265,7 +265,7 @@ def create_yahoo_account(self,
265265
if use_proxy:
266266
proxy = self.get_proxy()
267267

268-
driver = create_driver(self.browser, captcha_extension=True, proxy=proxy)
268+
driver = create_driver(self.browser, captcha_extension=True, proxy=proxy, captcha_key=captcha_key)
269269

270270
sms_key = self.get_sms_key()
271271

ninjemail/utils/webdriver_utils.py

+18-5
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,19 @@
99
import undetected_chromedriver as uc
1010
import os
1111
from urllib.parse import urlparse
12+
import os
13+
import re
14+
15+
def add_capsolver_api_key(file_path, api_key):
16+
with open(file_path, 'r') as file:
17+
content = file.read()
18+
19+
updated_content = re.sub(r'apiKey:\s*\'[^\']*\'', f'apiKey: \'{api_key}\'', content)
1220

21+
with open(file_path, 'w') as file:
22+
file.write(updated_content)
1323

14-
def create_driver(browser, captcha_extension=False, proxy=None):
24+
def create_driver(browser, captcha_extension=False, proxy=None, captcha_key=None):
1525
"""
1626
Create a WebDriver instance for the specified browser with optional configurations.
1727
@@ -40,7 +50,7 @@ def create_driver(browser, captcha_extension=False, proxy=None):
4050
options = FirefoxOptions()
4151
options.add_argument('--no-sandbox')
4252
options.add_argument('--disable-gpu')
43-
options.add_argument('--headless')
53+
#options.add_argument('--headless')
4454
custom_profile.set_preference("intl.accept_languages", "en-us")
4555

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

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

90-
driver = uc.Chrome(options=options, headless=True, use_subprocess=False)
103+
driver = uc.Chrome(options=options, headless=False, use_subprocess=False)
91104
else:
92105
raise ValueError('Unsupported browser')
93106
return driver

0 commit comments

Comments
 (0)