-
Notifications
You must be signed in to change notification settings - Fork 446
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Elmer Miroslav Mosher Golovin <[email protected]>
- Loading branch information
1 parent
4cc268d
commit ad36f50
Showing
2 changed files
with
64 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,6 @@ | ||
# | ||
# @copyright Copyright (c) 2023, Daniel Calviño Sánchez ([email protected]) | ||
# @copyright Copyright (c) 2023, Elmer Miroslav Mosher Golovin ([email protected]) | ||
# | ||
# @license GNU AGPL version 3 or any later version | ||
# | ||
|
@@ -236,4 +237,11 @@ def getFfmpegExtensionVideo(self): | |
""" | ||
return self._configParser.get('ffmpeg', 'extensionvideo', fallback='.webm') | ||
|
||
def getBrowserForRecording(self): | ||
""" | ||
Returns the browser identifier that will be used for recordings. | ||
Defaults to "firefox". | ||
""" | ||
return self._configParser.get('recording', 'browser', fallback='firefox') | ||
|
||
config = Config() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,6 @@ | ||
# | ||
# @copyright Copyright (c) 2023, Daniel Calviño Sánchez ([email protected]) | ||
# @copyright Copyright (c) 2023, Elmer Miroslav Mosher Golovin ([email protected]) | ||
# | ||
# @license GNU AGPL version 3 or any later version | ||
# | ||
|
@@ -33,8 +34,14 @@ | |
from secrets import token_urlsafe | ||
from selenium import webdriver | ||
from selenium.webdriver.common.by import By | ||
from selenium.webdriver.chrome.options import Options as ChromeOptions | ||
from selenium.webdriver.chrome.service import Service as ChromeService | ||
from selenium.webdriver.chrome.webdriver import WebDriver as ChromeDriver | ||
from selenium.webdriver.firefox.options import Options as FirefoxOptions | ||
from selenium.webdriver.firefox.service import Service as FirefoxService | ||
from selenium.webdriver.firefox.webdriver import WebDriver as FirefoxDriver | ||
from selenium.webdriver.support.wait import WebDriverWait | ||
|
||
from shutil import disk_usage | ||
from time import sleep | ||
|
||
|
@@ -202,6 +209,50 @@ def __del__(self): | |
# created in "/tmp". | ||
self.driver.quit() | ||
|
||
def startChrome(self, width, height, env): | ||
""" | ||
Starts a Chrome instance. Will use Chromium is Google Chrome is not installed. | ||
:param width: the width of the browser window. | ||
:param height: the height of the browser window. | ||
:param env: the environment variables, including the display to start | ||
the browser in. | ||
""" | ||
|
||
options = ChromeOptions() | ||
|
||
# "webSocketUrl" is needed for BiDi; this should be set already by | ||
# default, but just in case. | ||
options.set_capability('webSocketUrl', True) | ||
|
||
options.add_argument('--use-fake-ui-for-media-stream') | ||
|
||
# Allow to play media without user interaction. | ||
options.add_argument('--autoplay-policy=no-user-gesture-required') | ||
|
||
options.add_argument('--kiosk') | ||
options.add_argument(f'--window-size={width},{height}') | ||
options.add_argument('--disable-infobars') | ||
options.add_argument('--no-sandbox') | ||
options.add_experimental_option("excludeSwitches", ["enable-automation"]) | ||
|
||
if disk_usage('/dev/shm').free < 2147483648: | ||
self._logger.info('Less than 2 GiB available in "/dev/shm", usage disabled') | ||
options.add_argument("--disable-dev-shm-usage") | ||
|
||
if disk_usage('/tmp').free < 134217728: | ||
self._logger.warning('Less than 128 MiB available in "/tmp", strange failures may occur') | ||
|
||
service = ChromeService( | ||
env=env, | ||
) | ||
|
||
self.driver = ChromeDriver( | ||
options=options, | ||
service=service, | ||
) | ||
|
||
self.bidiLogsHelper = BiDiLogsHelper(self.driver, self._parentLogger) | ||
|
||
def startFirefox(self, width, height, env): | ||
""" | ||
Starts a Firefox instance. | ||
|
@@ -212,7 +263,7 @@ def startFirefox(self, width, height, env): | |
the browser in. | ||
""" | ||
|
||
options = webdriver.FirefoxOptions() | ||
options = FirefoxOptions() | ||
|
||
# "webSocketUrl" is needed for BiDi; this should be set already by | ||
# default, but just in case. | ||
|
@@ -239,7 +290,7 @@ def startFirefox(self, width, height, env): | |
env=env, | ||
) | ||
|
||
self.driver = webdriver.Firefox( | ||
self.driver = FirefoxDriver( | ||
options=options, | ||
service=service, | ||
) | ||
|
@@ -418,7 +469,9 @@ def __init__(self, browser, nextcloudUrl, width, height, env, parentLogger): | |
|
||
self.seleniumHelper = SeleniumHelper(parentLogger) | ||
|
||
if browser == 'firefox': | ||
if browser == 'chrome': | ||
self.seleniumHelper.startChrome(width, height, env) | ||
elif browser == 'firefox': | ||
self.seleniumHelper.startFirefox(width, height, env) | ||
else: | ||
raise Exception('Invalid browser: ' + browser) | ||
|