Skip to content

Commit 6a7ee58

Browse files
Merge pull request #118 from botcity-dev/fix/0.branch-browser-options
FIX: Adjusting browser options to avoid issues when running as admin
2 parents 441a896 + 4bf6252 commit 6a7ee58

File tree

3 files changed

+37
-20
lines changed

3 files changed

+37
-20
lines changed

botcity/web/browsers/chrome.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from selenium.webdriver.chrome.options import Options as ChromeOptions
88
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
99

10+
from ..util import is_admin
11+
1012

1113
def default_options(headless=False, download_folder_path=None, user_data_dir=None,
1214
page_load_strategy="normal") -> ChromeOptions:
@@ -48,25 +50,23 @@ def default_options(headless=False, download_folder_path=None, user_data_dir=Non
4850

4951
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
5052

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

55+
# Check if user is root
56+
if is_admin():
57+
if os.name == "posix":
58+
chrome_options.add_argument("--no-sandbox")
59+
else:
60+
# Disable banner for Browser being remote-controlled
61+
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
62+
5563
if headless:
5664
chrome_options.add_argument("--headless")
5765
chrome_options.add_argument("--headless=new")
5866
chrome_options.add_argument("--disable-gpu")
5967
chrome_options.add_argument("--hide-scrollbars")
6068
chrome_options.add_argument("--mute-audio")
6169

62-
# Check if user is root
63-
try:
64-
# This is only valid with Unix
65-
if os.geteuid() == 0:
66-
chrome_options.add_argument("--no-sandbox")
67-
except AttributeError:
68-
pass
69-
7070
chrome_options._botcity_temp_dir = None
7171
if not user_data_dir:
7272
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
@@ -7,6 +7,8 @@
77
from msedge.selenium_tools import Edge, EdgeOptions # noqa: F401, F403
88
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
99

10+
from ..util import is_admin
11+
1012

1113
def default_options(headless=False, download_folder_path=None, user_data_dir=None,
1214
page_load_strategy="normal") -> EdgeOptions:
@@ -44,25 +46,23 @@ def default_options(headless=False, download_folder_path=None, user_data_dir=Non
4446

4547
edge_options.add_argument("--disable-blink-features=AutomationControlled")
4648

47-
# Disable banner for Browser being remote-controlled
48-
edge_options.add_experimental_option("excludeSwitches", ["enable-automation"])
4949
edge_options.add_experimental_option('useAutomationExtension', False)
5050

51+
# Check if user is root
52+
if is_admin():
53+
if os.name == "posix":
54+
edge_options.add_argument("--no-sandbox")
55+
else:
56+
# Disable banner for Browser being remote-controlled
57+
edge_options.add_experimental_option("excludeSwitches", ["enable-automation"])
58+
5159
if headless:
5260
edge_options.add_argument("--headless")
5361
edge_options.add_argument("--headless=new")
5462
edge_options.add_argument("--disable-gpu")
5563
edge_options.add_argument("--hide-scrollbars")
5664
edge_options.add_argument("--mute-audio")
5765

58-
# Check if user is root
59-
try:
60-
# This is only valid with Unix
61-
if os.geteuid() == 0:
62-
edge_options.add_argument("--no-sandbox")
63-
except AttributeError:
64-
pass
65-
6666
edge_options._botcity_temp_dir = None
6767
if not user_data_dir:
6868
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)