Skip to content

Commit aedbe14

Browse files
authored
Merge pull request #3709 from seleniumbase/realtime-fingerprint-changing
Realtime fingerprint changing
2 parents 8d37f15 + ee5d974 commit aedbe14

File tree

11 files changed

+72
-22
lines changed

11 files changed

+72
-22
lines changed

examples/cdp_mode/ReadMe.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -361,8 +361,8 @@ with SB(uc=True, test=True, locale="en", pls="none") as sb:
361361
### 🐙 <b translate="no">CDP Mode</b> API / Methods
362362

363363
```python
364-
sb.cdp.get(url)
365-
sb.cdp.open(url)
364+
sb.cdp.get(url, **kwargs)
365+
sb.cdp.open(url, **kwargs)
366366
sb.cdp.reload(ignore_cache=True, script_to_evaluate_on_load=None)
367367
sb.cdp.refresh()
368368
sb.cdp.get_event_loop()

examples/cdp_mode/raw_tab_switching.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from seleniumbase import SB
22

3-
with SB(uc=True) as sb:
3+
with SB(uc=True, test=True) as sb:
44
sb.activate_cdp_mode()
55
sb.open("data:text/html,<h1>Page A</h1>")
66
sb.assert_text("Page A")

examples/cdp_mode/raw_timezone_sb.py

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"""An example of changing settings during CDP Mode"""
2+
from seleniumbase import SB
3+
4+
with SB(uc=True, test=True, pls="eager") as sb:
5+
url = "https://www.randymajors.org/what-time-zone-am-i-in"
6+
sb.activate_cdp_mode(url, tzone="Asia/Kolkata", geoloc=(26.863, 80.94))
7+
sb.remove_elements("#right-sidebar")
8+
sb.remove_elements('[id*="Footer"]')
9+
sb.sleep(5)
10+
sb.cdp.open(url, tzone="Asia/Tokyo", geoloc=(35.050681, 136.844728))
11+
sb.remove_elements("#right-sidebar")
12+
sb.remove_elements('[id*="Footer"]')
13+
sb.sleep(5)

help_docs/method_summary.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,7 @@ self._print(TEXT) # Calls Python's print() / Allows for translations
679679

680680
# (Mainly for CDP Mode) - (For all CDP methods, see the CDP Mode Docs)
681681

682-
self.activate_cdp_mode(url=None) # Activate CDP Mode on the given URL
682+
self.activate_cdp_mode(url=None, **kwargs) # Activate CDP Mode on URL
683683
self.reconnect(timeout=0.1) # disconnect() + sleep(timeout) + connect()
684684
self.disconnect() # Stops the webdriver service to prevent detection
685685
self.connect() # Starts the webdriver service to allow actions again
@@ -759,7 +759,7 @@ driver.uc_open(url) # (Open in same tab with default reconnect_time)
759759
driver.uc_open_with_tab(url) # (New tab with default reconnect_time)
760760
driver.uc_open_with_reconnect(url, reconnect_time=None) # (New tab)
761761
driver.uc_open_with_disconnect(url, timeout=None) # New tab + sleep()
762-
driver.uc_activate_cdp_mode(url=None) # Activate CDP Mode on the given URL
762+
driver.uc_activate_cdp_mode(url=None, **kwargs) # Activate CDP Mode on URL
763763
driver.reconnect(timeout=0.1) # disconnect() + sleep(timeout) + connect()
764764
driver.disconnect() # Stops the webdriver service to prevent detection
765765
driver.connect() # Starts the webdriver service to allow actions again

seleniumbase/__version__.py

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

seleniumbase/core/browser_launcher.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ def uc_open_with_reconnect(driver, url, reconnect_time=None):
515515
return None
516516

517517

518-
def uc_open_with_cdp_mode(driver, url=None):
518+
def uc_open_with_cdp_mode(driver, url=None, **kwargs):
519519
import asyncio
520520
from seleniumbase.undetected.cdp_driver import cdp_util
521521

@@ -607,7 +607,9 @@ def uc_open_with_cdp_mode(driver, url=None):
607607
loop.run_until_complete(page_tab.activate())
608608

609609
loop.run_until_complete(driver.cdp_base.update_targets())
610-
page = loop.run_until_complete(driver.cdp_base.get(url))
610+
page = loop.run_until_complete(
611+
driver.cdp_base.get(url, **kwargs)
612+
)
611613
with gui_lock:
612614
with suppress(Exception):
613615
shared_utils.make_writable(constants.MultiBrowser.PYAUTOGUILOCK)
@@ -792,8 +794,8 @@ def uc_open_with_cdp_mode(driver, url=None):
792794
driver._is_using_cdp = True
793795

794796

795-
def uc_activate_cdp_mode(driver, url=None):
796-
uc_open_with_cdp_mode(driver, url=url)
797+
def uc_activate_cdp_mode(driver, url=None, **kwargs):
798+
uc_open_with_cdp_mode(driver, url=url, **kwargs)
797799

798800

799801
def uc_open_with_disconnect(driver, url, timeout=None):

seleniumbase/core/sb_cdp.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,12 @@ def __add_sync_methods(self, element):
101101
element.get_parent = lambda: self.__get_parent(element)
102102
return element
103103

104-
def get(self, url):
104+
def get(self, url, **kwargs):
105105
url = shared_utils.fix_url_as_needed(url)
106106
driver = self.driver
107107
if hasattr(driver, "cdp_base"):
108108
driver = driver.cdp_base
109-
self.loop.run_until_complete(self.page.get(url))
109+
self.loop.run_until_complete(self.page.get(url, **kwargs))
110110
url_protocol = url.split(":")[0]
111111
safe_url = True
112112
if url_protocol not in ["about", "data", "chrome"]:
@@ -120,8 +120,8 @@ def get(self, url):
120120
self.__slow_mode_pause_if_set()
121121
self.loop.run_until_complete(self.page.wait())
122122

123-
def open(self, url):
124-
self.get(url)
123+
def open(self, url, **kwargs):
124+
self.get(url, **kwargs)
125125

126126
def reload(self, ignore_cache=True, script_to_evaluate_on_load=None):
127127
self.loop.run_until_complete(

seleniumbase/fixtures/base_case.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -4870,7 +4870,7 @@ def deactivate_design_mode(self, url=None):
48704870
script = """document.designMode = 'off';"""
48714871
self.execute_script(script)
48724872

4873-
def activate_cdp_mode(self, url=None):
4873+
def activate_cdp_mode(self, url=None, **kwargs):
48744874
if hasattr(self.driver, "_is_using_uc") and self.driver._is_using_uc:
48754875
if self.__is_cdp_swap_needed():
48764876
return # CDP Mode is already active
@@ -4879,10 +4879,10 @@ def activate_cdp_mode(self, url=None):
48794879
current_url = self.get_current_url()
48804880
if not current_url.startswith(("about", "data", "chrome")):
48814881
self.get_new_driver(undetectable=True)
4882-
self.driver.uc_open_with_cdp_mode(url)
4882+
self.driver.uc_open_with_cdp_mode(url, **kwargs)
48834883
else:
48844884
self.get_new_driver(undetectable=True)
4885-
self.driver.uc_open_with_cdp_mode(url)
4885+
self.driver.uc_open_with_cdp_mode(url, **kwargs)
48864886
self.cdp = self.driver.cdp
48874887

48884888
def activate_recorder(self):

seleniumbase/undetected/cdp_driver/browser.py

+21
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ async def get(
256256
url="about:blank",
257257
new_tab: bool = False,
258258
new_window: bool = False,
259+
**kwargs,
259260
) -> tab.Tab:
260261
"""Top level get. Utilizes the first tab to retrieve given url.
261262
Convenience function known from selenium.
@@ -309,6 +310,26 @@ async def get(
309310
and sb_config._cdp_geolocation
310311
):
311312
_cdp_geolocation = sb_config._cdp_geolocation
313+
if "timezone" in kwargs:
314+
_cdp_timezone = kwargs["timezone"]
315+
elif "tzone" in kwargs:
316+
_cdp_timezone = kwargs["tzone"]
317+
if "user_agent" in kwargs:
318+
_cdp_user_agent = kwargs["user_agent"]
319+
elif "agent" in kwargs:
320+
_cdp_user_agent = kwargs["agent"]
321+
if "locale" in kwargs:
322+
_cdp_locale = kwargs["locale"]
323+
elif "lang" in kwargs:
324+
_cdp_locale = kwargs["lang"]
325+
if "platform" in kwargs:
326+
_cdp_platform = kwargs["platform"]
327+
elif "plat" in kwargs:
328+
_cdp_platform = kwargs["plat"]
329+
if "geolocation" in kwargs:
330+
_cdp_geolocation = kwargs["geolocation"]
331+
elif "geoloc" in kwargs:
332+
_cdp_geolocation = kwargs["geoloc"]
312333
if _cdp_timezone:
313334
await connection.send(cdp.page.navigate("about:blank"))
314335
await connection.set_timezone(_cdp_timezone)

seleniumbase/undetected/cdp_driver/cdp_util.py

+4
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,10 @@ async def start(
383383
sb_config._cdp_user_agent = None
384384
if "platform" in kwargs:
385385
sb_config._cdp_platform = kwargs["platform"]
386+
elif "plat" in kwargs:
387+
sb_config._cdp_platform = kwargs["plat"]
388+
else:
389+
sb_config._cdp_platform = None
386390
return driver
387391

388392

seleniumbase/undetected/cdp_driver/tab.py

+15-5
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ async def get(
338338
url="about:blank",
339339
new_tab: bool = False,
340340
new_window: bool = False,
341+
**kwargs,
341342
):
342343
"""
343344
Top level get. Utilizes the first tab to retrieve the given url.
@@ -359,14 +360,23 @@ async def get(
359360
if new_tab:
360361
if hasattr(sb_config, "incognito") and sb_config.incognito:
361362
return await self.browser.get(
362-
url, new_tab=False, new_window=True
363+
url, new_tab=False, new_window=True, **kwargs
363364
)
364365
else:
365-
return await self.browser.get(url, new_tab, new_window)
366+
return await self.browser.get(
367+
url, new_tab, new_window, **kwargs
368+
)
366369
else:
367-
frame_id, loader_id, *_ = await self.send(cdp.page.navigate(url))
368-
await self
369-
return self
370+
if not kwargs:
371+
frame_id, loader_id, *_ = await self.send(
372+
cdp.page.navigate(url)
373+
)
374+
await self
375+
return self
376+
else:
377+
return await self.browser.get(
378+
url, new_tab, new_window, **kwargs
379+
)
370380

371381
async def query_selector_all(
372382
self,

0 commit comments

Comments
 (0)