Update CDP Mode
This commit is contained in:
parent
5d732a412f
commit
9beb99fa0e
|
@ -8,6 +8,7 @@ from seleniumbase.__version__ import __version__
|
||||||
from seleniumbase.common import decorators # noqa
|
from seleniumbase.common import decorators # noqa
|
||||||
from seleniumbase.common import encryption # noqa
|
from seleniumbase.common import encryption # noqa
|
||||||
from seleniumbase.core import colored_traceback
|
from seleniumbase.core import colored_traceback
|
||||||
|
from seleniumbase.core import sb_cdp # noqa
|
||||||
from seleniumbase.core.browser_launcher import get_driver # noqa
|
from seleniumbase.core.browser_launcher import get_driver # noqa
|
||||||
from seleniumbase.fixtures import js_utils # noqa
|
from seleniumbase.fixtures import js_utils # noqa
|
||||||
from seleniumbase.fixtures import page_actions # noqa
|
from seleniumbase.fixtures import page_actions # noqa
|
||||||
|
@ -18,6 +19,7 @@ from seleniumbase.masterqa.master_qa import MasterQA # noqa
|
||||||
from seleniumbase.plugins.sb_manager import SB # noqa
|
from seleniumbase.plugins.sb_manager import SB # noqa
|
||||||
from seleniumbase.plugins.driver_manager import Driver # noqa
|
from seleniumbase.plugins.driver_manager import Driver # noqa
|
||||||
from seleniumbase.plugins.driver_manager import DriverContext # noqa
|
from seleniumbase.plugins.driver_manager import DriverContext # noqa
|
||||||
|
from seleniumbase.undetected import cdp_driver # noqa
|
||||||
from seleniumbase import translate # noqa
|
from seleniumbase import translate # noqa
|
||||||
|
|
||||||
with suppress(Exception):
|
with suppress(Exception):
|
||||||
|
|
|
@ -235,8 +235,12 @@ def extend_driver(driver, proxy_auth=False, use_uc=True):
|
||||||
driver.reset_window_size = DM.reset_window_size
|
driver.reset_window_size = DM.reset_window_size
|
||||||
if hasattr(driver, "proxy"):
|
if hasattr(driver, "proxy"):
|
||||||
driver.set_wire_proxy = DM.set_wire_proxy
|
driver.set_wire_proxy = DM.set_wire_proxy
|
||||||
if proxy_auth and not use_uc:
|
if proxy_auth:
|
||||||
time.sleep(0.11) # Proxy needs moment to load in Manifest V3
|
# Proxy needs a moment to load in Manifest V3
|
||||||
|
if use_uc:
|
||||||
|
time.sleep(0.12)
|
||||||
|
else:
|
||||||
|
time.sleep(0.22)
|
||||||
return driver
|
return driver
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
"""Add CDP methods to extend the driver"""
|
"""Add CDP methods to extend the driver"""
|
||||||
|
import asyncio
|
||||||
import fasteners
|
import fasteners
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -11,6 +12,7 @@ from seleniumbase.fixtures import constants
|
||||||
from seleniumbase.fixtures import js_utils
|
from seleniumbase.fixtures import js_utils
|
||||||
from seleniumbase.fixtures import page_utils
|
from seleniumbase.fixtures import page_utils
|
||||||
from seleniumbase.fixtures import shared_utils
|
from seleniumbase.fixtures import shared_utils
|
||||||
|
from seleniumbase.undetected.cdp_driver import cdp_util
|
||||||
|
|
||||||
|
|
||||||
class CDPMethods():
|
class CDPMethods():
|
||||||
|
@ -208,14 +210,16 @@ class CDPMethods():
|
||||||
element = self.__add_sync_methods(element)
|
element = self.__add_sync_methods(element)
|
||||||
return self.__add_sync_methods(element)
|
return self.__add_sync_methods(element)
|
||||||
elif (
|
elif (
|
||||||
element.parent
|
element
|
||||||
|
and element.parent
|
||||||
and tag_name in element.parent.tag_name.lower()
|
and tag_name in element.parent.tag_name.lower()
|
||||||
and text.strip() in element.parent.text
|
and text.strip() in element.parent.text
|
||||||
):
|
):
|
||||||
element = self.__add_sync_methods(element.parent)
|
element = self.__add_sync_methods(element.parent)
|
||||||
return self.__add_sync_methods(element)
|
return self.__add_sync_methods(element)
|
||||||
elif (
|
elif (
|
||||||
element.parent
|
element
|
||||||
|
and element.parent
|
||||||
and element.parent.parent
|
and element.parent.parent
|
||||||
and tag_name in element.parent.parent.tag_name.lower()
|
and tag_name in element.parent.parent.tag_name.lower()
|
||||||
and text.strip() in element.parent.parent.text
|
and text.strip() in element.parent.parent.text
|
||||||
|
@ -269,7 +273,8 @@ class CDPMethods():
|
||||||
if element not in updated_elements:
|
if element not in updated_elements:
|
||||||
updated_elements.append(element)
|
updated_elements.append(element)
|
||||||
elif (
|
elif (
|
||||||
element.parent
|
element
|
||||||
|
and element.parent
|
||||||
and tag_name in element.parent.tag_name.lower()
|
and tag_name in element.parent.tag_name.lower()
|
||||||
and text.strip() in element.parent.text
|
and text.strip() in element.parent.text
|
||||||
):
|
):
|
||||||
|
@ -277,7 +282,8 @@ class CDPMethods():
|
||||||
if element not in updated_elements:
|
if element not in updated_elements:
|
||||||
updated_elements.append(element)
|
updated_elements.append(element)
|
||||||
elif (
|
elif (
|
||||||
element.parent
|
element
|
||||||
|
and element.parent
|
||||||
and element.parent.parent
|
and element.parent.parent
|
||||||
and tag_name in element.parent.parent.tag_name.lower()
|
and tag_name in element.parent.parent.tag_name.lower()
|
||||||
and text.strip() in element.parent.parent.text
|
and text.strip() in element.parent.parent.text
|
||||||
|
@ -2093,3 +2099,13 @@ class CDPMethods():
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self.select(selector).save_screenshot(filename)
|
self.select(selector).save_screenshot(filename)
|
||||||
|
|
||||||
|
|
||||||
|
class Chrome(CDPMethods):
|
||||||
|
def __init__(self, url=None, **kwargs):
|
||||||
|
if not url:
|
||||||
|
url = "about:blank"
|
||||||
|
loop = asyncio.new_event_loop()
|
||||||
|
driver = cdp_util.start_sync(**kwargs)
|
||||||
|
page = loop.run_until_complete(driver.get(url))
|
||||||
|
super().__init__(loop, page, driver)
|
||||||
|
|
|
@ -1 +1,3 @@
|
||||||
from seleniumbase.undetected.cdp_driver import cdp_util # noqa
|
from seleniumbase.undetected.cdp_driver import cdp_util # noqa
|
||||||
|
from seleniumbase.undetected.cdp_driver.cdp_util import start_async # noqa
|
||||||
|
from seleniumbase.undetected.cdp_driver.cdp_util import start_sync # noqa
|
||||||
|
|
|
@ -15,6 +15,7 @@ import urllib.parse
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import warnings
|
import warnings
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
from seleniumbase import config as sb_config
|
||||||
from typing import List, Set, Tuple, Union
|
from typing import List, Set, Tuple, Union
|
||||||
import mycdp as cdp
|
import mycdp as cdp
|
||||||
from . import cdp_util as util
|
from . import cdp_util as util
|
||||||
|
@ -287,6 +288,9 @@ class Browser:
|
||||||
filter(lambda item: item.type_ == "page", self.targets)
|
filter(lambda item: item.type_ == "page", self.targets)
|
||||||
)
|
)
|
||||||
# Use the tab to navigate to new url
|
# Use the tab to navigate to new url
|
||||||
|
if hasattr(sb_config, "_cdp_locale") and sb_config._cdp_locale:
|
||||||
|
await connection.send(cdp.page.navigate("about:blank"))
|
||||||
|
await connection.set_locale(sb_config._cdp_locale)
|
||||||
frame_id, loader_id, *_ = await connection.send(
|
frame_id, loader_id, *_ = await connection.send(
|
||||||
cdp.page.navigate(url)
|
cdp.page.navigate(url)
|
||||||
)
|
)
|
||||||
|
|
|
@ -232,9 +232,9 @@ async def start(
|
||||||
browser_args: Optional[List[str]] = None,
|
browser_args: Optional[List[str]] = None,
|
||||||
xvfb_metrics: Optional[List[str]] = None, # "Width,Height" for Linux
|
xvfb_metrics: Optional[List[str]] = None, # "Width,Height" for Linux
|
||||||
sandbox: Optional[bool] = True,
|
sandbox: Optional[bool] = True,
|
||||||
lang: Optional[str] = None,
|
lang: Optional[str] = None, # Set the Language Locale Code
|
||||||
host: Optional[str] = None,
|
host: Optional[str] = None, # Chrome remote-debugging-host
|
||||||
port: Optional[int] = None,
|
port: Optional[int] = None, # Chrome remote-debugging-port
|
||||||
xvfb: Optional[int] = None, # Use a special virtual display on Linux
|
xvfb: Optional[int] = None, # Use a special virtual display on Linux
|
||||||
headed: Optional[bool] = None, # Override default Xvfb mode on Linux
|
headed: Optional[bool] = None, # Override default Xvfb mode on Linux
|
||||||
expert: Optional[bool] = None, # Open up closed Shadow-root elements
|
expert: Optional[bool] = None, # Open up closed Shadow-root elements
|
||||||
|
@ -320,7 +320,15 @@ async def start(
|
||||||
time.sleep(0.15)
|
time.sleep(0.15)
|
||||||
driver = await Browser.create(config)
|
driver = await Browser.create(config)
|
||||||
if proxy and "@" in str(proxy):
|
if proxy and "@" in str(proxy):
|
||||||
time.sleep(0.11)
|
time.sleep(0.15)
|
||||||
|
if lang:
|
||||||
|
sb_config._cdp_locale = lang
|
||||||
|
elif "locale" in kwargs:
|
||||||
|
sb_config._cdp_locale = kwargs["locale"]
|
||||||
|
elif "locale_code" in kwargs:
|
||||||
|
sb_config._cdp_locale = kwargs["locale_code"]
|
||||||
|
else:
|
||||||
|
sb_config._cdp_locale = None
|
||||||
return driver
|
return driver
|
||||||
|
|
||||||
|
|
||||||
|
@ -360,9 +368,6 @@ def start_sync(*args, **kwargs) -> Browser:
|
||||||
):
|
):
|
||||||
loop = kwargs["loop"]
|
loop = kwargs["loop"]
|
||||||
else:
|
else:
|
||||||
try:
|
|
||||||
loop = asyncio.get_event_loop()
|
|
||||||
except RuntimeError:
|
|
||||||
loop = asyncio.new_event_loop()
|
loop = asyncio.new_event_loop()
|
||||||
headless = False
|
headless = False
|
||||||
binary_location = None
|
binary_location = None
|
||||||
|
|
Loading…
Reference in New Issue