Skip to content

Commit abeeb4a

Browse files
committed
Update CDP Mode
1 parent 5aaeb39 commit abeeb4a

File tree

5 files changed

+79
-11
lines changed

5 files changed

+79
-11
lines changed

seleniumbase/core/browser_launcher.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,6 +1486,10 @@ def _uc_gui_click_captcha(
14861486
'[data-callback="onCaptchaSuccess"]'
14871487
):
14881488
frame = '[data-callback="onCaptchaSuccess"]'
1489+
elif driver.is_element_present(
1490+
"div:not([class]) > div:not([class])"
1491+
):
1492+
frame = "div:not([class]) > div:not([class])"
14891493
else:
14901494
return
14911495
if (
@@ -1829,6 +1833,10 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
18291833
frame = ".cf-turnstile-wrapper"
18301834
elif driver.is_element_present('[class="cf-turnstile"]'):
18311835
frame = '[class="cf-turnstile"]'
1836+
elif driver.is_element_present(
1837+
"div:not([class]) > div:not([class])"
1838+
):
1839+
frame = "div:not([class]) > div:not([class])"
18321840
else:
18331841
return
18341842
else:
@@ -3048,6 +3056,11 @@ def get_driver(
30483056
if _special_binary_exists(binary_location, "atlas"):
30493057
driver_dir = DRIVER_DIR_ATLAS
30503058
sb_config._cdp_browser = "atlas"
3059+
if undetectable and mobile_emulator:
3060+
# For stealthy mobile mode, see the CDP Mode examples
3061+
# to learn how to properly configure it.
3062+
user_agent = None # Undo the override
3063+
mobile_emulator = False # Instead, set from CDP Mode
30513064
if (
30523065
hasattr(sb_config, "settings")
30533066
and getattr(sb_config.settings, "NEW_DRIVER_DIR", None)

seleniumbase/core/sb_cdp.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2030,6 +2030,10 @@ def __click_captcha(self, use_cdp=False):
20302030
'[data-callback="onCaptchaSuccess"]'
20312031
):
20322032
selector = '[data-callback="onCaptchaSuccess"]'
2033+
elif self.is_element_present(
2034+
"div:not([class]) > div:not([class])"
2035+
):
2036+
selector = "div:not([class]) > div:not([class])"
20332037
else:
20342038
return
20352039
if not selector:

seleniumbase/fixtures/base_case.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10136,6 +10136,21 @@ def assert_element(self, selector, by="css selector", timeout=None):
1013610136
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
1013710137
timeout = self.__get_new_timeout(timeout)
1013810138
if self.__is_cdp_swap_needed():
10139+
if self.demo_mode:
10140+
selector, by = self.__recalculate_selector(
10141+
selector, by, xp_ok=False
10142+
)
10143+
a_t = "ASSERT"
10144+
if self._language != "English":
10145+
from seleniumbase.fixtures.words import SD
10146+
10147+
a_t = SD.translate_assert(self._language)
10148+
messenger_post = "<b>%s %s</b>: %s" % (
10149+
a_t, by.upper(), selector
10150+
)
10151+
self.__highlight_with_assert_success(
10152+
messenger_post, selector, by
10153+
)
1013910154
self.cdp.assert_element(selector, timeout=timeout)
1014010155
return True
1014110156
if isinstance(selector, list):
@@ -10430,6 +10445,20 @@ def assert_text(
1043010445
messenger_post, selector, by
1043110446
)
1043210447
elif self.__is_cdp_swap_needed():
10448+
if self.demo_mode:
10449+
a_t = "ASSERT TEXT"
10450+
i_n = "in"
10451+
if self._language != "English":
10452+
from seleniumbase.fixtures.words import SD
10453+
10454+
a_t = SD.translate_assert_text(self._language)
10455+
i_n = SD.translate_in(self._language)
10456+
messenger_post = "<b>%s</b>: {%s} %s %s: %s" % (
10457+
a_t, text, i_n, by.upper(), selector
10458+
)
10459+
self.__highlight_with_assert_success(
10460+
messenger_post, selector, by
10461+
)
1043310462
self.cdp.assert_text(text, selector, timeout=timeout)
1043410463
return True
1043510464
elif self.__is_shadow_selector(selector):

seleniumbase/fixtures/js_utils.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,18 @@ def safe_execute_script(driver, script):
282282
This method will load jQuery if it wasn't already loaded."""
283283
try:
284284
execute_script(driver, script)
285+
except TypeError as e:
286+
if (
287+
(
288+
shared_utils.is_cdp_swap_needed(driver)
289+
or hasattr(driver, "_swap_driver")
290+
)
291+
and "cannot unpack non-iterable" in str(e)
292+
):
293+
pass
294+
else:
295+
activate_jquery(driver) # It's a good thing we can define it here
296+
execute_script(driver, script)
285297
except Exception:
286298
# The likely reason this fails is because: "jQuery is not defined"
287299
activate_jquery(driver) # It's a good thing we can define it here
@@ -1311,22 +1323,34 @@ def slow_scroll_to_element(driver, element, *args, **kwargs):
13111323
element_location_y = None
13121324
try:
13131325
if shared_utils.is_cdp_swap_needed(driver):
1314-
element.get_position().y
1326+
element_location_y = element.get_position().y
13151327
else:
13161328
element_location_y = element.location["y"]
13171329
except Exception:
1318-
element.location_once_scrolled_into_view
1330+
if shared_utils.is_cdp_swap_needed(driver):
1331+
element.scroll_into_view()
1332+
else:
1333+
element.location_once_scrolled_into_view
13191334
return
13201335
try:
1321-
element_location_x = element.location["x"]
1336+
if shared_utils.is_cdp_swap_needed(driver):
1337+
element_location_x = element.get_position().x
1338+
else:
1339+
element_location_x = element.location["x"]
13221340
except Exception:
13231341
element_location_x = 0
13241342
try:
1325-
element_width = element.size["width"]
1343+
if shared_utils.is_cdp_swap_needed(driver):
1344+
element_width = element.get_position().width
1345+
else:
1346+
element_width = element.size["width"]
13261347
except Exception:
13271348
element_width = 0
13281349
try:
1329-
screen_width = driver.get_window_size()["width"]
1350+
if shared_utils.is_cdp_swap_needed(driver):
1351+
screen_width = driver.cdp.get_window_size()["width"]
1352+
else:
1353+
screen_width = driver.get_window_size()["width"]
13301354
except Exception:
13311355
screen_width = execute_script(driver, "return window.innerWidth;")
13321356
element_location_y = element_location_y - constants.Scroll.Y_OFFSET

seleniumbase/undetected/cdp_driver/config.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ def __init__(
123123
self._default_browser_args = [
124124
"--window-size=%s,%s" % (start_width, start_height),
125125
"--window-position=%s,%s" % (start_x, start_y),
126-
"--remote-allow-origins=*",
127126
"--no-first-run",
128127
"--no-service-autorun",
129128
"--disable-auto-reload",
@@ -138,8 +137,10 @@ def __init__(
138137
'--simulate-outdated-no-au="Tue, 31 Dec 2099 23:59:59 GMT"',
139138
"--password-store=basic",
140139
"--deny-permission-prompts",
141-
"--disable-infobars",
140+
"--disable-application-cache",
141+
"--test-type",
142142
"--disable-breakpad",
143+
"--disable-setuid-sandbox",
143144
"--disable-prompt-on-repost",
144145
"--disable-password-generation",
145146
"--disable-ipc-flooding-protection",
@@ -149,8 +150,8 @@ def __init__(
149150
"--disable-client-side-phishing-detection",
150151
"--disable-top-sites",
151152
"--disable-translate",
153+
"--dns-prefetch-disable",
152154
"--disable-renderer-backgrounding",
153-
"--disable-background-networking",
154155
"--disable-dev-shm-usage",
155156
]
156157

@@ -207,9 +208,6 @@ def __call__(self):
207208
"OptimizationHintsFetching,InterestFeedContentSuggestions,"
208209
"DisableLoadExtensionCommandLineSwitch"
209210
]
210-
if self.proxy:
211-
args += ["--test-type"]
212-
args += ["--disable-session-crashed-bubble"]
213211
if self.expert:
214212
args += [
215213
"--disable-web-security",

0 commit comments

Comments
 (0)