Skip to content

Commit ae4b33d

Browse files
committed
Update driver options
1 parent 4def25a commit ae4b33d

File tree

2 files changed

+75
-16
lines changed

2 files changed

+75
-16
lines changed

seleniumbase/core/browser_launcher.py

Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

seleniumbase/core/detect_b_ver.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,10 @@ def get_browser_version_from_binary(binary_location):
235235
binary_location = binary_location.replace(" ", r"\ ")
236236
cmd_mapping = binary_location + " --version"
237237
pattern = r"\d+\.\d+\.\d+"
238+
quad_pattern = r"\d+\.\d+\.\d+\.\d+"
239+
quad_version = read_version_from_cmd(cmd_mapping, quad_pattern)
240+
if quad_version and len(str(quad_version)) >= 9: # Eg. 115.0.0.0
241+
return quad_version
238242
version = read_version_from_cmd(cmd_mapping, pattern)
239243
return version
240244
except Exception:
@@ -332,6 +336,10 @@ def get_browser_version_from_os(browser_type):
332336
try:
333337
cmd_mapping = cmd_mapping[browser_type][os_name()]
334338
pattern = PATTERN[browser_type]
339+
quad_pattern = r"\d+\.\d+\.\d+\.\d+"
340+
quad_version = read_version_from_cmd(cmd_mapping, quad_pattern)
341+
if quad_version and len(str(quad_version)) >= 9: # Eg. 115.0.0.0
342+
return quad_version
335343
version = read_version_from_cmd(cmd_mapping, pattern)
336344
return version
337345
except Exception:

0 commit comments

Comments
 (0)