Skip to content

Commit 6430090

Browse files
Merge pull request #117 from botcity-dev/fix/browser-options
FIX: Adjusting browser options to avoid issues when running as admin
2 parents 4396e5c + a033188 commit 6430090

File tree

3 files changed

+38
-19
lines changed

3 files changed

+38
-19
lines changed

botcity/web/browsers/chrome.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
99
from selenium.webdriver.chrome.service import Service as ChromeService # noqa: F401, F403
1010

11+
from ..util import is_admin
12+
1113

1214
def default_options(headless=False, download_folder_path=None, user_data_dir=None,
1315
page_load_strategy="normal", binary_path: str = None) -> ChromeOptions:
@@ -52,9 +54,16 @@ def default_options(headless=False, download_folder_path=None, user_data_dir=Non
5254

5355
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
5456

55-
# Disable banner for Browser being remote-controlled
56-
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
5757
chrome_options.add_experimental_option('useAutomationExtension', False)
58+
59+
# Check if user is root
60+
if is_admin():
61+
if os.name == "posix":
62+
chrome_options.add_argument("--no-sandbox")
63+
else:
64+
# Disable banner for Browser being remote-controlled
65+
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
66+
5867
if headless:
5968
chrome_options.add_argument("--headless")
6069
chrome_options.add_argument("--headless=new")
@@ -63,13 +72,6 @@ def default_options(headless=False, download_folder_path=None, user_data_dir=Non
6372
chrome_options.add_argument("--hide-scrollbars")
6473
chrome_options.add_argument("--mute-audio")
6574

66-
# Check if user is root
67-
try:
68-
# This is only valid with Unix
69-
if os.geteuid() == 0:
70-
chrome_options.add_argument("--no-sandbox")
71-
except AttributeError:
72-
pass
7375
chrome_options._botcity_temp_dir = None
7476
if not user_data_dir:
7577
temp_dir = tempfile.TemporaryDirectory(prefix="botcity_")

botcity/web/browsers/edge.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from selenium.webdriver import Edge, EdgeOptions # noqa: F401, F403
99
from selenium.webdriver.edge.service import Service as EdgeService # noqa: F401, F403
1010

11+
from ..util import is_admin
12+
1113

1214
def default_options(headless=False, download_folder_path=None, user_data_dir=None,
1315
page_load_strategy="normal", binary_path: str = None) -> EdgeOptions:
@@ -48,10 +50,16 @@ def default_options(headless=False, download_folder_path=None, user_data_dir=Non
4850
edge_options.add_argument("--disable-features=msSmartScreenProtection")
4951
edge_options.add_argument("--disable-blink-features=AutomationControlled")
5052

51-
# Disable banner for Browser being remote-controlled
52-
edge_options.add_experimental_option("excludeSwitches", ["enable-automation"])
5353
edge_options.add_experimental_option('useAutomationExtension', False)
5454

55+
# Check if user is root
56+
if is_admin():
57+
if os.name == "posix":
58+
edge_options.add_argument("--no-sandbox")
59+
else:
60+
# Disable banner for Browser being remote-controlled
61+
edge_options.add_experimental_option("excludeSwitches", ["enable-automation"])
62+
5563
if headless:
5664
edge_options.add_argument("--headless")
5765
edge_options.add_argument("--headless=new")
@@ -60,14 +68,6 @@ def default_options(headless=False, download_folder_path=None, user_data_dir=Non
6068
edge_options.add_argument("--hide-scrollbars")
6169
edge_options.add_argument("--mute-audio")
6270

63-
# Check if user is root
64-
try:
65-
# This is only valid with Unix
66-
if os.geteuid() == 0:
67-
edge_options.add_argument("--no-sandbox")
68-
except AttributeError:
69-
pass
70-
7171
edge_options._botcity_temp_dir = None
7272
if not user_data_dir:
7373
temp_dir = tempfile.TemporaryDirectory(prefix="botcity_")

botcity/web/util.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
import shutil
23
import tempfile
34

@@ -19,6 +20,22 @@ def cleanup_temp_dir(temp_dir: tempfile.TemporaryDirectory) -> None:
1920
shutil.rmtree(temp_dir.name, ignore_errors=True)
2021

2122

23+
def is_admin():
24+
if os.name == "nt":
25+
# Only applies to Windows
26+
import ctypes
27+
try:
28+
return ctypes.windll.shell32.IsUserAnAdmin() != 0
29+
except Exception:
30+
return False
31+
else:
32+
# Unix/Linux check
33+
try:
34+
return os.geteuid() == 0
35+
except Exception:
36+
return False
37+
38+
2239
def element_as_select(element: WebElement) -> Select:
2340
"""Wraps a WebElement in a Select object.
2441

0 commit comments

Comments
 (0)