@@ -90,6 +90,28 @@ def make_driver_executable_if_not(driver_path):
90
90
make_executable (driver_path )
91
91
92
92
93
+ def requests_get (url ):
94
+ import requests
95
+
96
+ response = None
97
+ try :
98
+ response = requests .get (url )
99
+ except Exception :
100
+ # Prevent SSLCertVerificationError / CERTIFICATE_VERIFY_FAILED
101
+ url = url .replace ("https://" , "http://" )
102
+ response = requests .get (url )
103
+ return response
104
+
105
+
106
+ def get_latest_chromedriver_version ():
107
+ last = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE"
108
+ url_request = requests_get (last )
109
+ if url_request .ok :
110
+ return url_request .text
111
+ else :
112
+ return None
113
+
114
+
93
115
def chromedriver_on_path ():
94
116
paths = os .environ ["PATH" ].split (os .pathsep )
95
117
for path in paths :
@@ -2101,15 +2123,23 @@ def get_local_driver(
2101
2123
constants .MultiBrowser .DRIVER_FIXING_LOCK
2102
2124
)
2103
2125
with edgedriver_fixing_lock :
2126
+ try :
2127
+ if not _was_driver_repaired ():
2128
+ _repair_edgedriver (edge_version )
2129
+ _mark_driver_repaired ()
2130
+ except Exception :
2131
+ pass
2132
+ else :
2133
+ try :
2104
2134
if not _was_driver_repaired ():
2105
2135
_repair_edgedriver (edge_version )
2106
- _mark_driver_repaired ()
2107
- else :
2108
- if not _was_driver_repaired ():
2109
- _repair_edgedriver (edge_version )
2110
- _mark_driver_repaired ()
2136
+ _mark_driver_repaired ()
2137
+ except Exception :
2138
+ pass
2111
2139
service = EdgeService (
2112
- executable_path = LOCAL_EDGEDRIVER , log_path = os .devnull
2140
+ executable_path = LOCAL_EDGEDRIVER ,
2141
+ log_path = os .devnull ,
2142
+ service_args = ["--disable-build-check" ],
2113
2143
)
2114
2144
driver = Edge (service = service , options = edge_options )
2115
2145
return driver
@@ -2169,6 +2199,7 @@ def get_local_driver(
2169
2199
driver = Edge (
2170
2200
executable_path = LOCAL_EDGEDRIVER ,
2171
2201
service_log_path = os .devnull ,
2202
+ service_args = ["--disable-build-check" ],
2172
2203
capabilities = capabilities ,
2173
2204
)
2174
2205
return driver
@@ -2346,6 +2377,7 @@ def get_local_driver(
2346
2377
driver_version = output
2347
2378
except Exception :
2348
2379
pass
2380
+ disable_build_check = False
2349
2381
if (
2350
2382
LOCAL_CHROMEDRIVER
2351
2383
and os .path .exists (LOCAL_CHROMEDRIVER )
@@ -2385,7 +2417,32 @@ def get_local_driver(
2385
2417
msg = "chromedriver not found. Getting it now:"
2386
2418
2387
2419
print ("\n Warning: %s" % msg )
2388
- sb_install .main (override = "chromedriver %s" % use_version )
2420
+ try :
2421
+ sb_install .main (
2422
+ override = "chromedriver %s" % use_version
2423
+ )
2424
+ except Exception :
2425
+ d_latest = get_latest_chromedriver_version ()
2426
+ if (
2427
+ d_latest
2428
+ and use_version != "latest"
2429
+ and int (use_version ) > int (d_latest .split ("." )[0 ])
2430
+ ):
2431
+ disable_build_check = True
2432
+ d_latest_major = d_latest .split ("." )[0 ]
2433
+ if (
2434
+ not path_chromedriver
2435
+ or (
2436
+ driver_version
2437
+ and (
2438
+ int (driver_version )
2439
+ < int (d_latest_major )
2440
+ )
2441
+ )
2442
+ ):
2443
+ sb_install .main (
2444
+ override = "chromedriver latest"
2445
+ )
2389
2446
sys .argv = sys_args # Put back the original sys args
2390
2447
else :
2391
2448
chromedriver_fixing_lock = fasteners .InterProcessLock (
@@ -2396,10 +2453,39 @@ def get_local_driver(
2396
2453
sys_args = sys .argv # Save a copy of sys args
2397
2454
msg = "chromedriver not found. Getting it now:"
2398
2455
print ("\n Warning: %s" % msg )
2399
- sb_install .main (
2400
- override = "chromedriver %s" % use_version
2401
- )
2456
+ try :
2457
+ sb_install .main (
2458
+ override = "chromedriver %s" % use_version
2459
+ )
2460
+ except Exception :
2461
+ d_latest = get_latest_chromedriver_version ()
2462
+ if (
2463
+ d_latest
2464
+ and use_version != "latest"
2465
+ and (
2466
+ int (use_version )
2467
+ > int (d_latest .split ("." )[0 ])
2468
+ )
2469
+ ):
2470
+ disable_build_check = True
2471
+ d_latest_major = d_latest .split ("." )[0 ]
2472
+ if (
2473
+ not path_chromedriver
2474
+ or (
2475
+ driver_version
2476
+ and (
2477
+ int (driver_version )
2478
+ < int (d_latest_major )
2479
+ )
2480
+ )
2481
+ ):
2482
+ sb_install .main (
2483
+ override = "chromedriver latest"
2484
+ )
2402
2485
sys .argv = sys_args # Put back original sys args
2486
+ service_args = []
2487
+ if disable_build_check :
2488
+ service_args = ["--disable-build-check" ]
2403
2489
if is_using_uc (undetectable , browser_name ):
2404
2490
uc_lock = fasteners .InterProcessLock (
2405
2491
constants .MultiBrowser .DRIVER_FIXING_LOCK
@@ -2474,7 +2560,7 @@ def get_local_driver(
2474
2560
uc_lock = fasteners .InterProcessLock (
2475
2561
constants .MultiBrowser .DRIVER_FIXING_LOCK
2476
2562
)
2477
- with uc_lock : # No UC multithreaded tests
2563
+ with uc_lock :
2478
2564
try :
2479
2565
uc_path = None
2480
2566
if os .path .exists (LOCAL_UC_DRIVER ):
@@ -2510,6 +2596,7 @@ def get_local_driver(
2510
2596
service = ChromeService (
2511
2597
executable_path = LOCAL_CHROMEDRIVER ,
2512
2598
log_path = os .devnull ,
2599
+ service_args = service_args ,
2513
2600
)
2514
2601
driver = webdriver .Chrome (
2515
2602
service = service ,
@@ -2519,18 +2606,24 @@ def get_local_driver(
2519
2606
driver = webdriver .Chrome (
2520
2607
executable_path = LOCAL_CHROMEDRIVER ,
2521
2608
service_log_path = os .devnull ,
2609
+ service_args = service_args ,
2522
2610
options = chrome_options ,
2523
2611
)
2524
2612
else :
2525
2613
if selenium4_or_newer :
2526
- service = ChromeService (log_path = os .devnull )
2614
+ service = ChromeService (
2615
+ log_path = os .devnull ,
2616
+ service_args = service_args ,
2617
+ )
2527
2618
driver = webdriver .Chrome (
2528
- service = service , options = chrome_options
2619
+ service = service ,
2620
+ options = chrome_options ,
2529
2621
)
2530
2622
else :
2531
2623
driver = webdriver .Chrome (
2532
- options = chrome_options ,
2533
2624
service_log_path = os .devnull ,
2625
+ service_args = service_args ,
2626
+ options = chrome_options ,
2534
2627
)
2535
2628
except Exception as e :
2536
2629
if not hasattr (e , "msg" ):
@@ -2629,7 +2722,8 @@ def get_local_driver(
2629
2722
if os .path .exists (LOCAL_CHROMEDRIVER ):
2630
2723
if selenium4_or_newer :
2631
2724
service = ChromeService (
2632
- executable_path = LOCAL_CHROMEDRIVER
2725
+ executable_path = LOCAL_CHROMEDRIVER ,
2726
+ service_args = ["--disable-build-check" ],
2633
2727
)
2634
2728
driver = webdriver .Chrome (
2635
2729
service = service ,
@@ -2638,10 +2732,23 @@ def get_local_driver(
2638
2732
else :
2639
2733
driver = webdriver .Chrome (
2640
2734
executable_path = LOCAL_CHROMEDRIVER ,
2735
+ service_args = ["--disable-build-check" ],
2641
2736
options = chrome_options ,
2642
2737
)
2643
2738
else :
2644
- driver = webdriver .Chrome (options = chrome_options )
2739
+ if selenium4_or_newer :
2740
+ service = ChromeService (
2741
+ service_args = ["--disable-build-check" ],
2742
+ )
2743
+ driver = webdriver .Chrome (
2744
+ service = service ,
2745
+ options = chrome_options ,
2746
+ )
2747
+ else :
2748
+ driver = webdriver .Chrome (
2749
+ service_args = ["--disable-build-check" ],
2750
+ options = chrome_options ,
2751
+ )
2645
2752
return driver
2646
2753
else : # Running headless on Linux (and not using --uc)
2647
2754
try :
@@ -2702,7 +2809,19 @@ def get_local_driver(
2702
2809
pass
2703
2810
_mark_driver_repaired ()
2704
2811
try :
2705
- return webdriver .Chrome (options = chrome_options )
2812
+ if selenium4_or_newer :
2813
+ service = ChromeService (
2814
+ service_args = ["--disable-build-check" ],
2815
+ )
2816
+ return webdriver .Chrome (
2817
+ service = service ,
2818
+ options = chrome_options ,
2819
+ )
2820
+ else :
2821
+ return webdriver .Chrome (
2822
+ service_args = ["--disable-build-check" ],
2823
+ options = chrome_options ,
2824
+ )
2706
2825
except Exception :
2707
2826
pass
2708
2827
# Use the virtual display on Linux during headless errors
0 commit comments