1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
import os
import sys
from . import BrowserName, logger
def get_username():
try:
return os.getlogin()
except OSError:
return os.environ.get('USERNAME') or os.environ.get('USER') or ''
BIN_LOCATIONS = {
BrowserName.CHROME: {
'linux': ['/usr/bin/google-chrome-stable'],
'windows': [
r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
r'C:\Program Files\Google\Chrome\Application\chrome.exe'
],
# Not tested
'macos': ['/Applications/Google Chrome.app/Contents/MacOS/Google Chrome']
},
BrowserName.CHROMIUM: {
'linux': ['/usr/bin/chromium', '/usr/bin/chromium-browser'],
'windows': [
r'C:\Program Files (x86)\Chromium\Application\chrome.exe',
r'C:\Program Files\Chromium\Application\chrome.exe'
],
# Not tested
'macos': ['/Applications/Chromium.app/Contents/MacOS/Chromium']
},
BrowserName.BRAVE: {
'linux': ['/usr/bin/brave', '/usr/bin/brave-browser'],
'windows': [
r'C:\Program Files (x86)\BraveSoftware\Brave-Browser\Application\brave.exe',
r'C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe',
fr'C:\Users\{get_username()}\AppData\Local\BraveSoftware\Brave-Browser\Application\brave.exe'
],
# Not tested
'macos': ['/Applications/Brave Browser.app/Contents/MacOS/Brave Browser']
},
BrowserName.EDGE: {
'linux': ['/usr/bin/microsoft-edge-stable'],
'windows': [
r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe',
r'C:\Program Files\Microsoft\Edge\Application\msedge.exe'
],
# Not tested
'macos': ['/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge']
},
BrowserName.FIREFOX: {
'linux': ['/usr/bin/firefox'],
'windows': [
r'C:\Program Files (x86)\Mozilla Firefox\firefox.exe',
r'C:\Program Files\Mozilla Firefox\firefox.exe'
],
# Not tested
'macos': ['/Applications/Firefox.app/Contents/MacOS/firefox']
},
BrowserName.LIBREWOLF: {
'linux': ['/usr/bin/librewolf'],
'windows': [
r'C:\Program Files (x86)\LibreWolf\librewolf.exe',
r'C:\Program Files\LibreWolf\librewolf.exe',
fr'C:\Users\{get_username()}\AppData\Local\LibreWolf\librewolf.exe'
],
# Not tested
'macos': ['/Applications/LibreWolf.app/Contents/MacOS/LibreWolf']
},
BrowserName.OPERA: {
'linux': ['/usr/bin/opera'],
'windows': [
r'C:\Program Files (x86)\Opera\opera.exe',
r'C:\Program Files\Opera\opera.exe',
fr'C:\Users\{get_username()}\AppData\Local\Programs\Opera\opera.exe'
],
'macos': ['/Applications/Opera.app/Contents/MacOS/Opera'] # Not tested
},
BrowserName.OPERA_GX: {
'linux': [],
'windows': [
r'C:\Program Files (x86)\Opera GX\opera.exe',
r'C:\Program Files\Opera GX\opera.exe',
fr'C:\Users\{get_username()}\AppData\Local\Programs\Opera GX\opera.exe'
],
# Not tested
'macos': ['/Applications/Opera GX.app/Contents/MacOS/Opera GX']
},
BrowserName.VIVALDI: {
'linux': ['/usr/bin/vivaldi-stable'],
'windows': [
r'C:\Program Files (x86)\Vivaldi\Application\vivaldi.exe',
r'C:\Program Files\Vivaldi\Application\vivaldi.exe',
fr'C:\Users\{get_username()}\AppData\Local\Vivaldi\Application\vivaldi.exe'
],
# Not tested
'macos': ['/Applications/Vivaldi.app/Contents/MacOS/Vivaldi']
}
}
class BinaryLocation:
def __init__(self, raise_not_found=False):
self.__raise_not_found = raise_not_found
if sys.platform == 'darwin':
self.__os = 'macos'
elif sys.platform.startswith('linux') or 'bsd' in sys.platform.lower():
self.__os = 'linux'
elif sys.platform == "win32":
self.__os = 'windows'
else:
raise ValueError('unsupported os')
def get(self, browser: str) -> str:
for i in BIN_LOCATIONS[browser][self.__os]:
if os.path.exists(i):
logger.info(f'found {browser} binary at: {i}')
return i
if self.__raise_not_found:
raise FileNotFoundError('browser not found')
logger.warning(f'could not find {browser} binary')
|