Skip to content

Commit

Permalink
Significantly simplify logic to create webdriver instance (execute.py)
Browse files Browse the repository at this point in the history
- avoids the problem associated with trying to add options to the webdriver instance
  - problem explained in extensive detail at #14 (reply in thread)
- provides all options to the webdriver instance before returning the webdriver instance from configure_{specified}driver() function rather than separately providing options as an argument to the webdriver instance in the set_up_headless_{specified}driver() function which runs ONLY WHEN ListCreator is instantiated with headless=True
  - previously, check_driver() provided either the uninstantiated webdriver object or a reference to the configure_{specified}driver() function
    - NOTE that this reference did not invoke the function, and only provided a reference to the configure_{specified}driver() function which returned a webdriver instance when **invoked**
  - this structure made it difficult to add options to the webdriver instance since
    - the program assigned the return value of check_driver() to seleniumdriver
    - the program then instantiated the seleniumdriver directly inside the open_driver() function if headless was set to False
    - OR the program instantiated seleniumdriver upon **invoking** the set_up_headless_{specified}driver() inside the open_driver() function if headless was set to True
    - since check_driver() returned an uninstantiated object or function reference, the options argument needed to be provided as an argument to the seleniumdriver variable directly
      - this was not intuitive at all, so the changes in this commit should make adding and changing options significantly easier
      - see #14 (reply in thread) for more details
  • Loading branch information
shailshouryya committed Apr 21, 2021
1 parent 64ad861 commit d90c29f
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 82 deletions.
74 changes: 29 additions & 45 deletions python/dev/execute.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,67 +44,46 @@ def process_url():
return f'{base_url}/{channel_type}/{channel}/{videos}'


def check_driver():
def open_user_driver():
nonlocal user_driver
if user_driver is None:
if execution_type == 'module': print(module_message.running_default_driver + '\n' + module_message.show_driver_options)
else: print(script_message.running_default_driver + '\n' + script_message.show_driver_options)
user_driver = 'firefox'
if 'firefox' in user_driver: return webdriver.Firefox
elif 'opera' in user_driver: return webdriver.Opera
elif 'chrome' in user_driver: return webdriver.Chrome
elif 'brave' in user_driver: return configure_bravedriver
elif 'edge' in user_driver: return configure_edgedriver
elif 'safari' in user_driver: return configure_safaridriver
if 'firefox' in user_driver: return configure_firefoxdriver()
elif 'opera' in user_driver: return configure_operadriver()
elif 'chrome' in user_driver: return configure_chromedriver()
elif 'brave' in user_driver: return configure_bravedriver()
elif 'edge' in user_driver: return configure_edgedriver()
elif 'safari' in user_driver: return configure_safaridriver()
else:
print(common_message.invalid_driver)
sys.exit()


def open_user_driver():
if headless is False:
return seleniumdriver()
else: # headless is True
if user_driver == 'firefox': return set_up_headless_firefoxdriver()
elif user_driver == 'opera': return set_up_headless_operadriver()
elif user_driver == 'safari': return set_up_headless_safaridriver()
elif user_driver == 'chrome': return set_up_headless_chromedriver()
elif user_driver == 'brave': return set_up_headless_bravedriver()
elif user_driver == 'edge': return set_up_headless_edgedriver()


def set_up_headless_firefoxdriver():

def configure_firefoxdriver():
options = selenium.webdriver.firefox.options.Options()
options.headless = True
return seleniumdriver(options=options)
if headless is True:
options.headless = True
return webdriver.Firefox(options=options)

def set_up_headless_operadriver():
def configure_operadriver():
# Opera driver MRO: WebDriver -> OperaDriver -> selenium.webdriver.chrome.webdriver.WebDriver -> selenium.webdriver.remote.webdriver.WebDriver -> builtins.object
# options = selenium.webdriver.chrome.options.Options()
# options.headless = True
options = webdriver.ChromeOptions()
options.add_argument('headless')
print(common_message.unsupported_opera_headless)
return seleniumdriver(options=options)
if headless is True:
options.add_argument('headless')
print(common_message.unsupported_opera_headless)
return webdriver.Opera(options=options)

def set_up_headless_safaridriver():
print(common_message.unsupported_safari_headless)
return seleniumdriver()

def set_up_headless_chromedriver():
def configure_chromedriver():
# options = selenium.webdriver.chrome.options.Options()
options = webdriver.ChromeOptions()
options.add_argument('headless')
return seleniumdriver(chrome_options=options)

def set_up_headless_bravedriver():
print(common_message.unsupported_brave_headless)
return configure_bravedriver()

def set_up_headless_edgedriver():
print(common_message.unsupported_edge_headless)
return configure_edgedriver()

if headless is True:
options.add_argument('headless')
return webdriver.Chrome(chrome_options=options)

def configure_bravedriver():
options = webdriver.ChromeOptions()
Expand All @@ -115,7 +94,9 @@ def configure_bravedriver():
else:
options.binary_location = '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser'
executable_path = '/usr/local/bin/bravedriver'
# options.headless = True
if headless is True:
print(common_message.unsupported_brave_headless)
# options.headless = True
return webdriver.Chrome(options=options, executable_path=executable_path)

def configure_edgedriver():
Expand All @@ -130,13 +111,17 @@ def configure_edgedriver():
print(common_message.unsupported_edge)
print(module_message.show_driver_options)
sys.exit()
# options.headless = True
if headless is True:
print(common_message.unsupported_edge_headless)
# options.headless = True
return webdriver.Edge(executable_path=executable_path)

def configure_safaridriver():
if user_os != 'macos':
common_message.display_dependency_setup_instructions('safari', user_os)
sys.exit()
if headless is True:
print(common_message.unsupported_safari_headless)
return webdriver.Safari()


Expand Down Expand Up @@ -206,7 +191,6 @@ def yield_logger(file_name):
verify_writing_to_at_least_one_file()
user_os = determine_user_os()
url = process_url()
seleniumdriver = check_driver()
program_start = time.perf_counter()
try:
driver = open_user_driver()
Expand Down
63 changes: 26 additions & 37 deletions python/yt_videos_list/execute.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,53 +34,37 @@ def process_url():
base_url = 'https://www.youtube.com'
videos = 'videos'
return f'{base_url}/{channel_type}/{channel}/{videos}'
def check_driver():
def open_user_driver():
nonlocal user_driver
if user_driver is None:
if execution_type == 'module': print(module_message.running_default_driver + '\n' + module_message.show_driver_options)
else: print(script_message.running_default_driver + '\n' + script_message.show_driver_options)
user_driver = 'firefox'
if 'firefox' in user_driver: return webdriver.Firefox
elif 'opera' in user_driver: return webdriver.Opera
elif 'chrome' in user_driver: return webdriver.Chrome
elif 'brave' in user_driver: return configure_bravedriver
elif 'edge' in user_driver: return configure_edgedriver
elif 'safari' in user_driver: return configure_safaridriver
if 'firefox' in user_driver: return configure_firefoxdriver()
elif 'opera' in user_driver: return configure_operadriver()
elif 'chrome' in user_driver: return configure_chromedriver()
elif 'brave' in user_driver: return configure_bravedriver()
elif 'edge' in user_driver: return configure_edgedriver()
elif 'safari' in user_driver: return configure_safaridriver()
else:
print(common_message.invalid_driver)
sys.exit()
def open_user_driver():
if headless is False:
return seleniumdriver()
else:
if user_driver == 'firefox': return set_up_headless_firefoxdriver()
elif user_driver == 'opera': return set_up_headless_operadriver()
elif user_driver == 'safari': return set_up_headless_safaridriver()
elif user_driver == 'chrome': return set_up_headless_chromedriver()
elif user_driver == 'brave': return set_up_headless_bravedriver()
elif user_driver == 'edge': return set_up_headless_edgedriver()
def set_up_headless_firefoxdriver():
def configure_firefoxdriver():
options = selenium.webdriver.firefox.options.Options()
options.headless = True
return seleniumdriver(options=options)
def set_up_headless_operadriver():
if headless is True:
options.headless = True
return webdriver.Firefox(options=options)
def configure_operadriver():
options = webdriver.ChromeOptions()
options.add_argument('headless')
print(common_message.unsupported_opera_headless)
return seleniumdriver(options=options)
def set_up_headless_safaridriver():
print(common_message.unsupported_safari_headless)
return seleniumdriver()
def set_up_headless_chromedriver():
if headless is True:
options.add_argument('headless')
print(common_message.unsupported_opera_headless)
return webdriver.Opera(options=options)
def configure_chromedriver():
options = webdriver.ChromeOptions()
options.add_argument('headless')
return seleniumdriver(chrome_options=options)
def set_up_headless_bravedriver():
print(common_message.unsupported_brave_headless)
return configure_bravedriver()
def set_up_headless_edgedriver():
print(common_message.unsupported_edge_headless)
return configure_edgedriver()
if headless is True:
options.add_argument('headless')
return webdriver.Chrome(chrome_options=options)
def configure_bravedriver():
options = webdriver.ChromeOptions()
if user_os == 'windows':
Expand All @@ -90,6 +74,8 @@ def configure_bravedriver():
else:
options.binary_location = '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser'
executable_path = '/usr/local/bin/bravedriver'
if headless is True:
print(common_message.unsupported_brave_headless)
return webdriver.Chrome(options=options, executable_path=executable_path)
def configure_edgedriver():
if user_os == 'windows':
Expand All @@ -100,11 +86,15 @@ def configure_edgedriver():
print(common_message.unsupported_edge)
print(module_message.show_driver_options)
sys.exit()
if headless is True:
print(common_message.unsupported_edge_headless)
return webdriver.Edge(executable_path=executable_path)
def configure_safaridriver():
if user_os != 'macos':
common_message.display_dependency_setup_instructions('safari', user_os)
sys.exit()
if headless is True:
print(common_message.unsupported_safari_headless)
return webdriver.Safari()
def show_user_how_to_set_up_selenium():
if user_driver != 'safari':
Expand Down Expand Up @@ -160,7 +150,6 @@ def yield_logger(file_name):
verify_writing_to_at_least_one_file()
user_os = determine_user_os()
url = process_url()
seleniumdriver = check_driver()
program_start = time.perf_counter()
try:
driver = open_user_driver()
Expand Down

0 comments on commit d90c29f

Please sign in to comment.