@@ -225,7 +225,7 @@ def chromedriver_on_path():
225225 return None
226226
227227
228- def get_uc_driver_version ():
228+ def get_uc_driver_version (full = False ):
229229 uc_driver_version = None
230230 if os .path .exists (LOCAL_UC_DRIVER ):
231231 try :
@@ -236,9 +236,13 @@ def get_uc_driver_version():
236236 output = output .decode ("latin1" )
237237 else :
238238 output = output .decode ("utf-8" )
239+ full_version = output .split (" " )[1 ]
239240 output = output .split (" " )[1 ].split ("." )[0 ]
240241 if int (output ) >= 72 :
241- uc_driver_version = output
242+ if full :
243+ uc_driver_version = full_version
244+ else :
245+ uc_driver_version = output
242246 except Exception :
243247 pass
244248 return uc_driver_version
@@ -2158,14 +2162,19 @@ def get_local_driver(
21582162 }
21592163 use_version = "latest"
21602164 major_edge_version = None
2165+ saved_mev = None
2166+ use_br_version_for_edge = False
2167+ use_exact_version_for_edge = False
21612168 try :
21622169 if binary_location :
21632170 try :
21642171 major_edge_version = (
21652172 detect_b_ver .get_browser_version_from_binary (
21662173 binary_location
21672174 )
2168- ).split ("." )[0 ]
2175+ )
2176+ saved_mev = major_edge_version
2177+ major_edge_version = saved_mev .split ("." )[0 ]
21692178 if len (major_edge_version ) < 2 :
21702179 major_edge_version = None
21712180 except Exception :
@@ -2174,11 +2183,25 @@ def get_local_driver(
21742183 br_app = "edge"
21752184 major_edge_version = (
21762185 detect_b_ver .get_browser_version_from_os (br_app )
2177- ).split ("." )[0 ]
2186+ )
2187+ saved_mev = major_edge_version
2188+ major_edge_version = major_edge_version .split ("." )[0 ]
21782189 if int (major_edge_version ) < 80 :
21792190 major_edge_version = None
2191+ elif int (major_edge_version ) >= 115 :
2192+ if (
2193+ driver_version == "browser"
2194+ and saved_mev
2195+ and len (saved_mev .split ("." )) == 4
2196+ ):
2197+ driver_version = saved_mev
2198+ use_br_version_for_edge = True
21802199 except Exception :
21812200 major_edge_version = None
2201+ if driver_version and "." in driver_version :
2202+ use_exact_version_for_edge = True
2203+ if use_br_version_for_edge :
2204+ major_edge_version = saved_mev
21822205 if major_edge_version :
21832206 use_version = major_edge_version
21842207 edge_driver_version = None
@@ -2194,19 +2217,20 @@ def get_local_driver(
21942217 output = output .decode ("utf-8" )
21952218 if output .split (" " )[0 ] == "MSEdgeDriver" :
21962219 # MSEdgeDriver VERSION
2197- output = output .split (" " )[1 ].split ("." )[0 ]
2220+ output = output .split (" " )[1 ]
2221+ if use_exact_version_for_edge :
2222+ edge_driver_version = output .split (" " )[0 ]
2223+ output = output .split ("." )[0 ]
21982224 elif output .split (" " )[0 ] == "Microsoft" :
2199- # Microsoft Edge WebDriver VERSION
2200- if (
2201- "WebDriver 115.0" in output
2202- and "115.0.1901.183" not in output
2203- ):
2204- edgedriver_upgrade_needed = True
2205- output = output .split (" " )[3 ].split ("." )[0 ]
2225+ output = output .split (" " )[3 ]
2226+ if use_exact_version_for_edge :
2227+ edge_driver_version = output .split (" " )[0 ]
2228+ output = output .split ("." )[0 ]
22062229 else :
22072230 output = 0
22082231 if int (output ) >= 2 :
2209- edge_driver_version = output
2232+ if not use_exact_version_for_edge :
2233+ edge_driver_version = output
22102234 if driver_version == "keep" :
22112235 driver_version = edge_driver_version
22122236 except Exception :
@@ -2639,16 +2663,20 @@ def get_local_driver(
26392663 )
26402664 use_version = "latest"
26412665 major_chrome_version = None
2666+ saved_mcv = None
26422667 full_ch_version = None
26432668 full_ch_driver_version = None
2669+ use_br_version_for_uc = False
26442670 try :
26452671 if chrome_options .binary_location :
26462672 try :
26472673 major_chrome_version = (
26482674 detect_b_ver .get_browser_version_from_binary (
26492675 chrome_options .binary_location ,
26502676 )
2651- ).split ("." )[0 ]
2677+ )
2678+ saved_mcv = major_chrome_version
2679+ major_chrome_version = saved_mcv .split ("." )[0 ]
26522680 if len (major_chrome_version ) < 2 :
26532681 major_chrome_version = None
26542682 except Exception :
@@ -2658,6 +2686,7 @@ def get_local_driver(
26582686 full_ch_version = (
26592687 detect_b_ver .get_browser_version_from_os (br_app )
26602688 )
2689+ saved_mcv = full_ch_version
26612690 major_chrome_version = full_ch_version .split ("." )[0 ]
26622691 if int (major_chrome_version ) < 67 :
26632692 major_chrome_version = None
@@ -2667,6 +2696,15 @@ def get_local_driver(
26672696 ):
26682697 # chromedrivers 2.41 - 2.46 could be swapped with 72
26692698 major_chrome_version = "72"
2699+ elif int (major_chrome_version ) >= 115 :
2700+ if (
2701+ driver_version == "browser"
2702+ and saved_mcv
2703+ and len (saved_mcv .split ("." )) == 4
2704+ ):
2705+ driver_version = saved_mcv
2706+ if is_using_uc (undetectable , browser_name ):
2707+ use_br_version_for_uc = True
26702708 except Exception :
26712709 major_chrome_version = None
26722710 if major_chrome_version :
@@ -2717,7 +2755,11 @@ def get_local_driver(
27172755 disable_build_check = True
27182756 uc_driver_version = None
27192757 if is_using_uc (undetectable , browser_name ):
2720- uc_driver_version = get_uc_driver_version ()
2758+ if use_br_version_for_uc :
2759+ uc_driver_version = get_uc_driver_version (full = True )
2760+ full_ch_driver_version = uc_driver_version
2761+ else :
2762+ uc_driver_version = get_uc_driver_version ()
27212763 if multi_proxy :
27222764 sb_config .multi_proxy = True
27232765 if uc_driver_version and driver_version == "keep" :
@@ -2774,7 +2816,10 @@ def get_local_driver(
27742816 ):
27752817 full_ch_v_p = full_ch_version .split ("." )[0 :2 ]
27762818 full_ch_driver_v_p = full_ch_driver_version .split ("." )[0 :2 ]
2777- if full_ch_v_p == full_ch_driver_v_p :
2819+ if (
2820+ full_ch_v_p == full_ch_driver_v_p
2821+ or driver_version == "keep"
2822+ ):
27782823 browser_driver_close_match = True
27792824 # If not ARM MAC and need to use uc_driver (and it's missing),
27802825 # and already have chromedriver with the correct version,
@@ -2821,6 +2866,12 @@ def get_local_driver(
28212866 and use_version != "latest" # Browser version detected
28222867 and uc_driver_version != use_version
28232868 )
2869+ or (
2870+ full_ch_driver_version # Also used for the uc_driver
2871+ and driver_version
2872+ and len (str (driver_version ).split ("." )) == 4
2873+ and full_ch_driver_version != driver_version
2874+ )
28242875 ):
28252876 # chromedriver download needed in the seleniumbase/drivers dir
28262877 from seleniumbase .console_scripts import sb_install
0 commit comments