Skip to content

Commit 32f1288

Browse files
authored
Merge pull request #3220 from seleniumbase/cdp-mode-patch-2
CDP Mode - Patch 2
2 parents c6eace1 + e88de45 commit 32f1288

File tree

10 files changed

+112
-93
lines changed

10 files changed

+112
-93
lines changed

examples/cdp_mode/raw_async.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ async def main():
3838
sb.internalize_links() # Don't open links in a new tab
3939
sb.click("#link_header_nav_experiences")
4040
sb.sleep(2)
41-
sb.remove_element("msm-cookie-banner")
41+
sb.remove_elements("msm-cookie-banner")
4242
sb.sleep(1)
4343
sb.press_keys('input[data-test-id*="search"]', "Amsterdam")
4444
sb.sleep(2)

examples/cdp_mode/raw_cdp.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def main():
1717
sb.internalize_links() # Don't open links in a new tab
1818
sb.click("#link_header_nav_experiences")
1919
sb.sleep(2)
20-
sb.remove_element("msm-cookie-banner")
20+
sb.remove_elements("msm-cookie-banner")
2121
sb.sleep(1)
2222
location = "Amsterdam"
2323
sb.press_keys('input[data-test-id*="search"]', location)

examples/cdp_mode/raw_cdp_with_sb.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
sb.internalize_links() # Don't open links in a new tab
1111
sb.click("#link_header_nav_experiences")
1212
sb.sleep(2)
13-
sb.remove_element("msm-cookie-banner")
13+
sb.remove_elements("msm-cookie-banner")
1414
sb.sleep(1)
1515
location = "Amsterdam"
1616
sb.press_keys('input[data-test-id*="search"]', location)

examples/verify_undetected.py

+6-12
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,16 @@
22
Some sites use scripts to detect Selenium, and then block you.
33
To evade detection, add --uc as a pytest command-line option."""
44
from seleniumbase import BaseCase
5-
from seleniumbase import DriverContext
65
BaseCase.main(__name__, __file__, "--uc", "-s")
76

87

98
class UndetectedTest(BaseCase):
109
def test_browser_is_undetected(self):
1110
url = "https://gitlab.com/users/sign_in"
1211
if not self.undetectable:
13-
with DriverContext(uc=True) as driver:
14-
driver.uc_activate_cdp_mode(url)
15-
driver.uc_gui_click_captcha()
16-
driver.assert_text("Username", '[for="user_login"]', timeout=3)
17-
print("\n Success! Website did not detect Selenium! ")
18-
else:
19-
self.activate_cdp_mode(url)
20-
self.uc_gui_click_captcha()
21-
self.assert_text("Username", '[for="user_login"]', timeout=3)
22-
self.post_message("SeleniumBase wasn't detected", duration=4)
23-
self._print("\n Success! Website did not detect Selenium! ")
12+
self.get_new_driver(undetectable=True)
13+
self.activate_cdp_mode(url)
14+
self.uc_gui_click_captcha()
15+
self.assert_text("Username", '[for="user_login"]', timeout=3)
16+
self.post_message("SeleniumBase wasn't detected", duration=4)
17+
self._print("\n Success! Website did not detect Selenium! ")

pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ packages = [
4949
"seleniumbase.resources",
5050
"seleniumbase.translate",
5151
"seleniumbase.undetected",
52+
"seleniumbase.undetected.cdp_driver",
5253
"seleniumbase.utilities",
5354
"seleniumbase.utilities.selenium_grid",
5455
"seleniumbase.utilities.selenium_ide",

seleniumbase/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "4.32.1"
2+
__version__ = "4.32.2"

seleniumbase/fixtures/base_case.py

+87-49
Original file line numberDiff line numberDiff line change
@@ -4090,6 +4090,88 @@ def get_new_driver(
40904090
"Browser: {%s} is not a valid browser option. "
40914091
"Valid options = {%s}" % (browser, valid_browsers)
40924092
)
4093+
# Fix Chrome-130 issues by creating a user-data-dir in advance
4094+
if (
4095+
undetectable
4096+
and (
4097+
not user_data_dir
4098+
or not os.path.exists(user_data_dir)
4099+
or not any(os.scandir(user_data_dir))
4100+
)
4101+
and self.browser == "chrome"
4102+
):
4103+
import tempfile
4104+
if not user_data_dir:
4105+
user_data_dir = os.path.normpath(tempfile.mkdtemp())
4106+
self.user_data_dir = user_data_dir
4107+
sb_config.user_data_dir = user_data_dir
4108+
try:
4109+
decoy_driver = browser_launcher.get_driver(
4110+
browser_name=browser_name,
4111+
headless=headless,
4112+
locale_code=locale_code,
4113+
use_grid=use_grid,
4114+
protocol=protocol,
4115+
servername=servername,
4116+
port=port,
4117+
proxy_string=proxy_string,
4118+
proxy_bypass_list=proxy_bypass_list,
4119+
proxy_pac_url=proxy_pac_url,
4120+
multi_proxy=multi_proxy,
4121+
user_agent=user_agent,
4122+
cap_file=cap_file,
4123+
cap_string=cap_string,
4124+
recorder_ext=recorder_ext,
4125+
disable_cookies=disable_cookies,
4126+
disable_js=disable_js,
4127+
disable_csp=disable_csp,
4128+
enable_ws=enable_ws,
4129+
enable_sync=enable_sync,
4130+
use_auto_ext=use_auto_ext,
4131+
undetectable=undetectable,
4132+
uc_cdp_events=uc_cdp_events,
4133+
uc_subprocess=uc_subprocess,
4134+
log_cdp_events=log_cdp_events,
4135+
no_sandbox=no_sandbox,
4136+
disable_gpu=disable_gpu,
4137+
headless1=headless1,
4138+
headless2=True,
4139+
incognito=incognito,
4140+
guest_mode=guest_mode,
4141+
dark_mode=dark_mode,
4142+
devtools=devtools,
4143+
remote_debug=remote_debug,
4144+
enable_3d_apis=enable_3d_apis,
4145+
swiftshader=swiftshader,
4146+
ad_block_on=ad_block_on,
4147+
host_resolver_rules=host_resolver_rules,
4148+
block_images=block_images,
4149+
do_not_track=do_not_track,
4150+
chromium_arg=chromium_arg,
4151+
firefox_arg=firefox_arg,
4152+
firefox_pref=firefox_pref,
4153+
user_data_dir=user_data_dir,
4154+
extension_zip=extension_zip,
4155+
extension_dir=extension_dir,
4156+
disable_features=disable_features,
4157+
binary_location=binary_location,
4158+
driver_version=driver_version,
4159+
page_load_strategy=page_load_strategy,
4160+
use_wire=use_wire,
4161+
external_pdf=external_pdf,
4162+
test_id=test_id,
4163+
mobile_emulator=is_mobile,
4164+
device_width=d_width,
4165+
device_height=d_height,
4166+
device_pixel_ratio=d_p_r,
4167+
browser=browser_name,
4168+
)
4169+
time.sleep(0.555)
4170+
except Exception:
4171+
pass
4172+
finally:
4173+
with suppress(Exception):
4174+
decoy_driver.quit()
40934175
# Launch a web browser
40944176
new_driver = browser_launcher.get_driver(
40954177
browser_name=browser_name,
@@ -4435,7 +4517,12 @@ def load_cookies(self, name="cookies.txt"):
44354517
"""Loads the page cookies from the "saved_cookies" folder."""
44364518
cookies = self.get_saved_cookies(name)
44374519
self.wait_for_ready_state_complete()
4520+
origin = self.get_origin()
4521+
trim_origin = origin.split("://")[-1]
44384522
for cookie in cookies:
4523+
if "domain" in cookie:
4524+
if cookie["domain"] not in origin:
4525+
cookie["domain"] = trim_origin
44394526
if "expiry" in cookie:
44404527
del cookie["expiry"]
44414528
self.driver.add_cookie(cookie)
@@ -4656,30 +4743,6 @@ def activate_cdp_mode(self, url=None):
46564743
if hasattr(self.driver, "_is_using_uc") and self.driver._is_using_uc:
46574744
self.driver.uc_open_with_cdp_mode(url)
46584745
else:
4659-
# Fix Chrome-130 issues by creating a user-data-dir in advance
4660-
if (
4661-
(
4662-
not self.user_data_dir
4663-
or not os.path.exists(self.user_data_dir)
4664-
)
4665-
and self.browser == "chrome"
4666-
):
4667-
import tempfile
4668-
user_data_dir = os.path.normpath(tempfile.mkdtemp())
4669-
self.user_data_dir = user_data_dir
4670-
sb_config.user_data_dir = user_data_dir
4671-
try:
4672-
driver = self.get_new_driver(
4673-
user_data_dir=user_data_dir,
4674-
undetectable=True,
4675-
headless2=True,
4676-
)
4677-
time.sleep(0.555)
4678-
except Exception:
4679-
pass
4680-
finally:
4681-
with suppress(Exception):
4682-
driver.quit()
46834746
self.get_new_driver(undetectable=True)
46844747
self.driver.uc_open_with_cdp_mode(url)
46854748
self.cdp = self.driver.cdp
@@ -14941,31 +15004,6 @@ def setUp(self, masterqa_mode=False):
1494115004
self.__js_start_time = int(time.time() * 1000.0)
1494215005
else:
1494315006
# Launch WebDriver for both pytest and pynose
14944-
14945-
# Fix Chrome-130 issues by creating a user-data-dir in advance
14946-
if (
14947-
self.undetectable
14948-
and (
14949-
not self.user_data_dir
14950-
or not os.path.exists(self.user_data_dir)
14951-
)
14952-
and self.browser == "chrome"
14953-
):
14954-
import tempfile
14955-
user_data_dir = os.path.normpath(tempfile.mkdtemp())
14956-
self.user_data_dir = user_data_dir
14957-
sb_config.user_data_dir = user_data_dir
14958-
try:
14959-
driver = self.get_new_driver(
14960-
user_data_dir=user_data_dir,
14961-
headless2=True,
14962-
)
14963-
time.sleep(0.555)
14964-
except Exception:
14965-
pass
14966-
finally:
14967-
with suppress(Exception):
14968-
driver.quit()
1496915007
self.driver = self.get_new_driver(
1497015008
browser=self.browser,
1497115009
headless=self.headless,

seleniumbase/plugins/driver_manager.py

+13-4
Original file line numberDiff line numberDiff line change
@@ -792,12 +792,21 @@ def Driver(
792792
from seleniumbase.core import browser_launcher
793793

794794
# Fix Chrome-130 issues by creating a user-data-dir in advance
795-
if undetectable and not user_data_dir and browser == "chrome":
795+
if (
796+
undetectable
797+
and (
798+
not user_data_dir
799+
or not os.path.exists(user_data_dir)
800+
or not any(os.scandir(user_data_dir))
801+
)
802+
and browser == "chrome"
803+
):
796804
import tempfile
797805
import time
798-
user_data_dir = (
799-
os.path.normpath(tempfile.mkdtemp())
800-
)
806+
if not user_data_dir:
807+
user_data_dir = (
808+
os.path.normpath(tempfile.mkdtemp())
809+
)
801810
try:
802811
decoy_driver = browser_launcher.get_driver(
803812
browser_name=browser_name,

seleniumbase/plugins/sb_manager.py

-24
Original file line numberDiff line numberDiff line change
@@ -1212,30 +1212,6 @@ def SB(
12121212
if not sb_config.multi_proxy:
12131213
proxy_helper.remove_proxy_zip_if_present()
12141214
start_time = time.time()
1215-
saved_headless2 = headless2
1216-
1217-
# Fix Chrome-130 issues by creating a user-data-dir in advance
1218-
if undetectable and not user_data_dir and browser == "chrome":
1219-
import tempfile
1220-
user_data_dir = (
1221-
os.path.normpath(tempfile.mkdtemp())
1222-
)
1223-
sb.user_data_dir = user_data_dir
1224-
sb_config.user_data_dir = user_data_dir
1225-
try:
1226-
decoy = sb
1227-
decoy.headless2 = True
1228-
decoy.setUp()
1229-
decoy.sleep(0.555)
1230-
except Exception:
1231-
pass
1232-
finally:
1233-
try:
1234-
decoy.tearDown()
1235-
except Exception:
1236-
pass
1237-
sb.headless2 = saved_headless2
1238-
12391215
sb.setUp()
12401216
test_passed = True # This can change later
12411217
teardown_exception = None

setup.py

+1
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@
317317
"seleniumbase.resources",
318318
"seleniumbase.translate",
319319
"seleniumbase.undetected",
320+
"seleniumbase.undetected.cdp_driver",
320321
"seleniumbase.utilities",
321322
"seleniumbase.utilities.selenium_grid",
322323
"seleniumbase.utilities.selenium_ide",

0 commit comments

Comments
 (0)