Skip to content

Commit 6f5257d

Browse files
committed
Make improvements to UC Mode
1 parent abcd21d commit 6f5257d

File tree

1 file changed

+80
-54
lines changed

1 file changed

+80
-54
lines changed

seleniumbase/core/browser_launcher.py

+80-54
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from selenium.webdriver.edge.service import Service as EdgeService
1717
from selenium.webdriver.firefox.service import Service as FirefoxService
1818
from selenium.webdriver.safari.service import Service as SafariService
19+
from seleniumbase import config as sb_config
1920
from seleniumbase import decorators
2021
from seleniumbase import drivers # webdriver storage folder for SeleniumBase
2122
from seleniumbase import extensions # browser extensions storage folder
@@ -1564,11 +1565,9 @@ def get_remote_driver(
15641565
extra_caps = {}
15651566
if cap_file:
15661567
from seleniumbase.core import capabilities_parser
1567-
15681568
desired_caps = capabilities_parser.get_desired_capabilities(cap_file)
15691569
if cap_string:
15701570
import json
1571-
15721571
try:
15731572
extra_caps = json.loads(str(cap_string))
15741573
except Exception as e:
@@ -2073,7 +2072,6 @@ def get_local_driver(
20732072
"IE Browser is for Windows-based systems only!"
20742073
)
20752074
from selenium.webdriver.ie.options import Options
2076-
20772075
ie_options = Options()
20782076
ie_options.ignore_protected_mode_settings = True
20792077
ie_options.ignore_zoom_level = True
@@ -2726,8 +2724,6 @@ def get_local_driver(
27262724
if is_using_uc(undetectable, browser_name):
27272725
uc_driver_version = get_uc_driver_version()
27282726
if multi_proxy:
2729-
from seleniumbase import config as sb_config
2730-
27312727
sb_config.multi_proxy = True
27322728
use_version = find_chromedriver_version_to_use(
27332729
use_version, driver_version
@@ -2983,7 +2979,6 @@ def get_local_driver(
29832979
if is_using_uc(undetectable, browser_name):
29842980
from seleniumbase import undetected
29852981
from urllib.error import URLError
2986-
29872982
if IS_LINUX:
29882983
if "--headless" in (
29892984
chrome_options.arguments
@@ -3007,52 +3002,70 @@ def get_local_driver(
30073002
chrome_options.add_experimental_option(
30083003
"w3c", True
30093004
)
3005+
if (
3006+
(not user_agent or "Headless" in user_agent)
3007+
and uc_chrome_version
3008+
and uc_chrome_version >= 117
3009+
and (headless or headless2)
3010+
and hasattr(sb_config, "uc_agent_cache")
3011+
):
3012+
user_agent = sb_config.uc_agent_cache
3013+
chrome_options.add_argument(
3014+
"--user-agent=%s" % user_agent
3015+
)
30103016
try:
30113017
if (
3012-
uc_chrome_version
3018+
(
3019+
not user_agent
3020+
or "Headless" in user_agent
3021+
)
3022+
and uc_chrome_version
30133023
and uc_chrome_version >= 117
30143024
and (headless or headless2)
3015-
and not user_agent
30163025
):
3026+
from seleniumbase.console_scripts import (
3027+
sb_install
3028+
)
3029+
sb_config.uc_user_agent_cache = True
30173030
headless_options = _set_chrome_options(
30183031
browser_name,
30193032
downloads_path,
30203033
True, # headless
30213034
locale_code,
3022-
proxy_string,
3023-
proxy_auth,
3024-
proxy_user,
3025-
proxy_pass,
3026-
proxy_bypass_list,
3027-
proxy_pac_url,
3028-
multi_proxy,
3029-
user_agent,
3030-
recorder_ext,
3035+
None, # proxy_string
3036+
None, # proxy_auth
3037+
None, # proxy_user
3038+
None, # proxy_pass
3039+
None, # proxy_bypass_list
3040+
None, # proxy_pac_url
3041+
None, # multi_proxy
3042+
None, # user_agent
3043+
None, # recorder_ext
30313044
disable_js,
30323045
disable_csp,
30333046
enable_ws,
30343047
enable_sync,
30353048
use_auto_ext,
3036-
False, # Undetectable
3037-
uc_cdp_events,
3038-
uc_subprocess,
3049+
False, # undetectable
3050+
False, # uc_cdp_events
3051+
False, # uc_subprocess
30393052
no_sandbox,
30403053
disable_gpu,
30413054
False, # headless2
30423055
incognito,
30433056
guest_mode,
30443057
dark_mode,
3045-
devtools,
3058+
None, # devtools
30463059
remote_debug,
30473060
enable_3d_apis,
30483061
swiftshader,
3049-
ad_block_on,
3062+
None, # ad_block_on
30503063
block_images,
30513064
do_not_track,
3052-
chromium_arg,
3053-
user_data_dir,
3054-
extension_zip,
3055-
extension_dir,
3065+
None, # chromium_arg
3066+
None, # user_data_dir
3067+
None, # extension_zip
3068+
None, # extension_dir
30563069
binary_location,
30573070
driver_version,
30583071
page_load_strategy,
@@ -3064,7 +3077,17 @@ def get_local_driver(
30643077
device_height,
30653078
device_pixel_ratio,
30663079
)
3067-
if not path_chromedriver:
3080+
if (
3081+
not path_chromedriver
3082+
or (
3083+
ch_driver_version
3084+
and use_version
3085+
and (
3086+
int(ch_driver_version)
3087+
< int(use_version)
3088+
)
3089+
)
3090+
):
30683091
sb_install.main(
30693092
override="chromedriver %s"
30703093
% use_version,
@@ -3091,12 +3114,16 @@ def get_local_driver(
30913114
service=service,
30923115
options=headless_options,
30933116
)
3094-
user_agent = driver.execute_script(
3095-
"return navigator.userAgent;"
3096-
).replace("Headless", "")
3097-
chrome_options.add_argument(
3098-
"--user-agent=%s" % user_agent
3099-
)
3117+
try:
3118+
user_agent = driver.execute_script(
3119+
"return navigator.userAgent;"
3120+
).replace("Headless", "")
3121+
chrome_options.add_argument(
3122+
"--user-agent=%s" % user_agent
3123+
)
3124+
sb_config.uc_agent_cache = user_agent
3125+
except Exception:
3126+
pass
31003127
driver.quit()
31013128
except Exception:
31023129
pass
@@ -3213,46 +3240,45 @@ def get_local_driver(
32133240
mcv = find_chromedriver_version_to_use(
32143241
mcv, driver_version
32153242
)
3216-
headless = True
32173243
headless_options = _set_chrome_options(
32183244
browser_name,
32193245
downloads_path,
3220-
headless,
3246+
True, # headless
32213247
locale_code,
3222-
proxy_string,
3223-
proxy_auth,
3224-
proxy_user,
3225-
proxy_pass,
3226-
proxy_bypass_list,
3227-
proxy_pac_url,
3228-
multi_proxy,
3229-
user_agent,
3230-
recorder_ext,
3248+
None, # proxy_string
3249+
None, # proxy_auth
3250+
None, # proxy_user
3251+
None, # proxy_pass
3252+
None, # proxy_bypass_list
3253+
None, # proxy_pac_url
3254+
None, # multi_proxy
3255+
None, # user_agent
3256+
None, # recorder_ext
32313257
disable_js,
32323258
disable_csp,
32333259
enable_ws,
32343260
enable_sync,
32353261
use_auto_ext,
3236-
undetectable,
3237-
uc_cdp_events,
3238-
uc_subprocess,
3262+
False, # undetectable
3263+
False, # uc_cdp_events
3264+
False, # uc_subprocess
32393265
no_sandbox,
32403266
disable_gpu,
3241-
headless2,
3267+
False, # headless2
32423268
incognito,
32433269
guest_mode,
32443270
dark_mode,
3245-
devtools,
3271+
None, # devtools
32463272
remote_debug,
32473273
enable_3d_apis,
32483274
swiftshader,
3249-
ad_block_on,
3275+
None, # ad_block_on
32503276
block_images,
32513277
do_not_track,
3252-
chromium_arg,
3253-
user_data_dir,
3254-
extension_zip,
3255-
extension_dir,
3278+
None, # chromium_arg
3279+
None, # user_data_dir
3280+
None, # extension_zip
3281+
None, # extension_dir
32563282
binary_location,
32573283
driver_version,
32583284
page_load_strategy,

0 commit comments

Comments
 (0)