Skip to content

Commit ab6931d

Browse files
authored
Merge pull request #1506 from seleniumbase/a-few-optimizations
A few optimizations (for new tabs and undetected-chromedriver mode)
2 parents ae95e8b + 0428e2a commit ab6931d

File tree

7 files changed

+34
-5
lines changed

7 files changed

+34
-5
lines changed

examples/hack_the_planet.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,7 @@ def test_all_your_base_are_belong_to_us(self):
365365
self.highlight("h1", loops=6, scroll=False)
366366

367367
self.open("https://status.iboss.com/ibcloud/app/cloudStatus.html")
368+
self.wait_for_element_clickable('div[translate*="cloudStatus"]')
368369
self.set_text_content('div[translate*="cloudStatus"]', ayb)
369370
self.set_text_content('div[translate*="maintenance"]', "ARE")
370371
self.set_text_content('div[translate*="advisory"]', "BELONG")

examples/wordle_archive_test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ def skip_if_incorrect_env(self):
5454
message = "This test doesn't run in headless mode!"
5555
print(message)
5656
self.skip(message)
57+
if not self.is_chromium():
58+
message = "This test requires a Chromium-based browser!"
59+
print(message)
60+
self.skip(message)
5761
if version_info < [2, 4, 4]:
5862
message = "This test requires SeleniumBase 2.4.4 or newer!"
5963
print(message)

seleniumbase/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "4.3.6"
2+
__version__ = "4.3.7"

seleniumbase/core/browser_launcher.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,14 @@ def _set_chrome_options(
610610
chrome_options.add_argument("--dns-prefetch-disable")
611611
chrome_options.add_argument("--disable-translate")
612612
chrome_options.add_argument("--disable-3d-apis")
613-
if is_using_uc(undetectable, browser_name):
613+
if (
614+
is_using_uc(undetectable, browser_name)
615+
and (
616+
not headless
617+
or "linux" in PLATFORM # switches to Xvfb (non-headless)
618+
)
619+
):
620+
# Skip remaining options that trigger anti-bot services
614621
return chrome_options
615622
chrome_options.add_argument("--test-type")
616623
chrome_options.add_argument("--log-level=3")
@@ -2428,6 +2435,7 @@ def get_local_driver(
24282435
uc_path = os.path.realpath(uc_path)
24292436
driver = undetected.Chrome(
24302437
options=chrome_options,
2438+
user_data_dir=user_data_dir,
24312439
driver_executable_path=uc_path,
24322440
headless=False, # Xvfb needed!
24332441
version_main=uc_chrome_version,
@@ -2444,6 +2452,7 @@ def get_local_driver(
24442452
)
24452453
driver = undetected.Chrome(
24462454
options=chrome_options,
2455+
user_data_dir=user_data_dir,
24472456
driver_executable_path=uc_path,
24482457
headless=False, # Xvfb needed!
24492458
version_main=uc_chrome_version,

seleniumbase/fixtures/base_case.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3103,9 +3103,14 @@ def set_content_to_parent_frame(self):
31033103
def open_new_window(self, switch_to=True):
31043104
"""Opens a new browser tab/window and switches to it by default."""
31053105
self.wait_for_ready_state_complete()
3106-
self.driver.execute_script("window.open('');")
3106+
if selenium4_or_newer and switch_to:
3107+
self.driver.switch_to.new_window("tab")
3108+
else:
3109+
self.driver.execute_script("window.open('');")
31073110
time.sleep(0.01)
3108-
if switch_to:
3111+
if self.browser == "safari":
3112+
self.wait_for_ready_state_complete()
3113+
if switch_to and not selenium4_or_newer:
31093114
self.switch_to_newest_window()
31103115
time.sleep(0.01)
31113116
if self.browser == "safari":

seleniumbase/fixtures/page_actions.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,6 +1296,16 @@ def switch_to_window(driver, window, timeout=settings.SMALL_TIMEOUT):
12961296
start_ms = time.time() * 1000.0
12971297
stop_ms = start_ms + (timeout * 1000.0)
12981298
if isinstance(window, int):
1299+
caps = driver.capabilities
1300+
if (
1301+
caps["browserName"].lower() == "safari"
1302+
and "safari:platformVersion" in caps
1303+
and caps["safari:platformVersion"].split(".") < ["10", "15"]
1304+
):
1305+
# Fix reversed window_handles on Safari 10.14 or lower
1306+
window = len(driver.window_handles) - 1 - window
1307+
if window < 0:
1308+
window = 0
12991309
for x in range(int(timeout * 10)):
13001310
shared_utils.check_if_time_limit_exceeded()
13011311
try:

seleniumbase/undetected/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def __init__(
148148
options.add_argument("--remote-debugging-host=%s" % debug_host)
149149
options.add_argument("--remote-debugging-port=%s" % debug_port)
150150
if user_data_dir:
151-
options.add_argument('--user-data-dir=%s' % user_data_dir)
151+
options.add_argument("--user-data-dir=%s" % user_data_dir)
152152
language, keep_user_data_dir = None, bool(user_data_dir)
153153
# See if a custom user profile is specified in options
154154
for arg in options.arguments:

0 commit comments

Comments
 (0)