seleniumbase 4.34.7__py3-none-any.whl → 4.34.9__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- seleniumbase/__version__.py +1 -1
- seleniumbase/core/browser_launcher.py +21 -0
- seleniumbase/core/sb_cdp.py +7 -2
- seleniumbase/fixtures/base_case.py +3 -3
- seleniumbase/undetected/__init__.py +24 -14
- seleniumbase/undetected/cdp_driver/cdp_util.py +22 -3
- seleniumbase/undetected/cdp_driver/tab.py +4 -0
- {seleniumbase-4.34.7.dist-info → seleniumbase-4.34.9.dist-info}/METADATA +1 -1
- {seleniumbase-4.34.7.dist-info → seleniumbase-4.34.9.dist-info}/RECORD +13 -13
- {seleniumbase-4.34.7.dist-info → seleniumbase-4.34.9.dist-info}/LICENSE +0 -0
- {seleniumbase-4.34.7.dist-info → seleniumbase-4.34.9.dist-info}/WHEEL +0 -0
- {seleniumbase-4.34.7.dist-info → seleniumbase-4.34.9.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.34.7.dist-info → seleniumbase-4.34.9.dist-info}/top_level.txt +0 -0
seleniumbase/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.34.
|
2
|
+
__version__ = "4.34.9"
|
@@ -1251,6 +1251,10 @@ def _uc_gui_click_captcha(
|
|
1251
1251
|
)
|
1252
1252
|
):
|
1253
1253
|
frame = '[data-testid*="challenge-"] div'
|
1254
|
+
elif driver.is_element_present(
|
1255
|
+
"form.turnstile div#turnstile-widget div:not([class])"
|
1256
|
+
):
|
1257
|
+
frame = "form.turnstile #turnstile-widget div:not([class])"
|
1254
1258
|
elif driver.is_element_present(
|
1255
1259
|
'form div:not([class]):has(input[name*="cf-turn"])'
|
1256
1260
|
):
|
@@ -1291,6 +1295,23 @@ def _uc_gui_click_captcha(
|
|
1291
1295
|
driver.cdp.evaluate(script)
|
1292
1296
|
else:
|
1293
1297
|
driver.execute_script(script)
|
1298
|
+
elif (
|
1299
|
+
driver.is_element_present("form")
|
1300
|
+
and driver.is_element_present(
|
1301
|
+
"form.turnstile #turnstile-widget > div:not([class])"
|
1302
|
+
)
|
1303
|
+
):
|
1304
|
+
script = (
|
1305
|
+
"""var $elements = document.querySelectorAll(
|
1306
|
+
'form.turnstile #turnstile-widget');
|
1307
|
+
var index = 0, length = $elements.length;
|
1308
|
+
for(; index < length; index++){
|
1309
|
+
$elements[index].setAttribute('align', 'left');}"""
|
1310
|
+
)
|
1311
|
+
if __is_cdp_swap_needed(driver):
|
1312
|
+
driver.cdp.evaluate(script)
|
1313
|
+
else:
|
1314
|
+
driver.execute_script(script)
|
1294
1315
|
if not is_in_frame or needs_switch:
|
1295
1316
|
# Currently not in frame (or nested frame outside CF one)
|
1296
1317
|
try:
|
seleniumbase/core/sb_cdp.py
CHANGED
@@ -877,8 +877,13 @@ class CDPMethods():
|
|
877
877
|
|
878
878
|
def evaluate(self, expression):
|
879
879
|
"""Run a JavaScript expression and return the result."""
|
880
|
-
|
881
|
-
|
880
|
+
expression = expression.strip()
|
881
|
+
exp_list = expression.split("\n")
|
882
|
+
if exp_list and exp_list[-1].strip().startswith("return "):
|
883
|
+
expression = (
|
884
|
+
"\n".join(exp_list[0:-1]) + "\n"
|
885
|
+
+ exp_list[-1].strip()[len("return "):]
|
886
|
+
).strip()
|
882
887
|
return self.loop.run_until_complete(
|
883
888
|
self.page.evaluate(expression)
|
884
889
|
)
|
@@ -3256,7 +3256,7 @@ class BaseCase(unittest.TestCase):
|
|
3256
3256
|
html_string = "\n".join(new_lines)
|
3257
3257
|
soup = self.get_beautiful_soup(html_string)
|
3258
3258
|
found_base = False
|
3259
|
-
links = soup.
|
3259
|
+
links = soup.find_all("link")
|
3260
3260
|
href = None
|
3261
3261
|
for link in links:
|
3262
3262
|
if link.get("rel") == ["canonical"] and link.get("href"):
|
@@ -3272,7 +3272,7 @@ class BaseCase(unittest.TestCase):
|
|
3272
3272
|
"<head>", '<head><base href="%s">' % href
|
3273
3273
|
)
|
3274
3274
|
elif not found_base:
|
3275
|
-
bases = soup.
|
3275
|
+
bases = soup.find_all("base")
|
3276
3276
|
for base in bases:
|
3277
3277
|
if base.get("href"):
|
3278
3278
|
href = base.get("href")
|
@@ -3280,7 +3280,7 @@ class BaseCase(unittest.TestCase):
|
|
3280
3280
|
html_string = html_string.replace('base: "."', 'base: "%s"' % href)
|
3281
3281
|
|
3282
3282
|
soup = self.get_beautiful_soup(html_string)
|
3283
|
-
scripts = soup.
|
3283
|
+
scripts = soup.find_all("script")
|
3284
3284
|
for script in scripts:
|
3285
3285
|
if script.get("type") != "application/json":
|
3286
3286
|
html_string = html_string.replace(str(script), "")
|
@@ -452,14 +452,19 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
|
|
452
452
|
self.service.start()
|
453
453
|
with suppress(Exception):
|
454
454
|
self.start_session()
|
455
|
+
time.sleep(0.0075)
|
455
456
|
with suppress(Exception):
|
456
|
-
|
457
|
-
self.
|
458
|
-
|
459
|
-
self.
|
460
|
-
|
461
|
-
|
462
|
-
|
457
|
+
for i in range(5):
|
458
|
+
if self.current_url.startswith("chrome-extension://"):
|
459
|
+
self.close()
|
460
|
+
if self.service.is_connectable():
|
461
|
+
self.stop_client()
|
462
|
+
self.service.stop()
|
463
|
+
self.service.start()
|
464
|
+
self.start_session()
|
465
|
+
time.sleep(0.0075)
|
466
|
+
else:
|
467
|
+
break
|
463
468
|
self._is_connected = True
|
464
469
|
|
465
470
|
def disconnect(self):
|
@@ -480,14 +485,19 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
|
|
480
485
|
self.service.start()
|
481
486
|
with suppress(Exception):
|
482
487
|
self.start_session()
|
488
|
+
time.sleep(0.0075)
|
483
489
|
with suppress(Exception):
|
484
|
-
|
485
|
-
self.
|
486
|
-
|
487
|
-
self.
|
488
|
-
|
489
|
-
|
490
|
-
|
490
|
+
for i in range(5):
|
491
|
+
if self.current_url.startswith("chrome-extension://"):
|
492
|
+
self.close()
|
493
|
+
if self.service.is_connectable():
|
494
|
+
self.stop_client()
|
495
|
+
self.service.stop()
|
496
|
+
self.service.start()
|
497
|
+
self.start_session()
|
498
|
+
time.sleep(0.0075)
|
499
|
+
else:
|
500
|
+
break
|
491
501
|
self._is_connected = True
|
492
502
|
|
493
503
|
def start_session(self, capabilities=None):
|
@@ -226,7 +226,11 @@ async def start_async(*args, **kwargs) -> Browser:
|
|
226
226
|
binary_location = None
|
227
227
|
if "browser_executable_path" in kwargs:
|
228
228
|
binary_location = kwargs["browser_executable_path"]
|
229
|
-
if
|
229
|
+
if (
|
230
|
+
shared_utils.is_chrome_130_or_newer(binary_location)
|
231
|
+
and "user_data_dir" in kwargs
|
232
|
+
and kwargs["user_data_dir"]
|
233
|
+
):
|
230
234
|
if "headless" in kwargs:
|
231
235
|
headless = kwargs["headless"]
|
232
236
|
decoy_args = kwargs
|
@@ -241,12 +245,27 @@ async def start_async(*args, **kwargs) -> Browser:
|
|
241
245
|
|
242
246
|
|
243
247
|
def start_sync(*args, **kwargs) -> Browser:
|
244
|
-
loop =
|
248
|
+
loop = None
|
249
|
+
if (
|
250
|
+
"loop" in kwargs
|
251
|
+
and kwargs["loop"]
|
252
|
+
and hasattr(kwargs["loop"], "create_task")
|
253
|
+
):
|
254
|
+
loop = kwargs["loop"]
|
255
|
+
else:
|
256
|
+
try:
|
257
|
+
loop = asyncio.get_event_loop()
|
258
|
+
except RuntimeError:
|
259
|
+
loop = asyncio.new_event_loop()
|
245
260
|
headless = False
|
246
261
|
binary_location = None
|
247
262
|
if "browser_executable_path" in kwargs:
|
248
263
|
binary_location = kwargs["browser_executable_path"]
|
249
|
-
if
|
264
|
+
if (
|
265
|
+
shared_utils.is_chrome_130_or_newer(binary_location)
|
266
|
+
and "user_data_dir" in kwargs
|
267
|
+
and kwargs["user_data_dir"]
|
268
|
+
):
|
250
269
|
if "headless" in kwargs:
|
251
270
|
headless = kwargs["headless"]
|
252
271
|
decoy_args = kwargs
|
@@ -896,6 +896,10 @@ class Tab(Connection):
|
|
896
896
|
"""
|
897
897
|
return await self.set_window_state(left, top, width, height)
|
898
898
|
|
899
|
+
async def set_window_rect(self, left=0, top=0, width=1280, height=1024):
|
900
|
+
"""Same as set_window_size(). Uses a different naming convention."""
|
901
|
+
return await self.set_window_state(left, top, width, height)
|
902
|
+
|
899
903
|
async def activate(self):
|
900
904
|
"""Active this target (Eg: tab, window, page)"""
|
901
905
|
await self.send(cdp.target.activate_target(self.target.target_id))
|
@@ -3,7 +3,7 @@ sbase/__main__.py,sha256=G0bVB1-DM4PGwQ1KyOupaWCs4ePbChZNNWuX2htim5U,647
|
|
3
3
|
sbase/steps.py,sha256=_WvAjydKqZfTdnZW9LPKkRty-g-lfdUPmLqnZj6ulcs,43013
|
4
4
|
seleniumbase/__init__.py,sha256=OtJh8nGKL4xtZpw8KPqmn7Q6R-86t4cWUDyVF5MbMTo,2398
|
5
5
|
seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
|
6
|
-
seleniumbase/__version__.py,sha256=
|
6
|
+
seleniumbase/__version__.py,sha256=lYiyjOWgbGT6PKF2swCq_LRy9Qn2s4pgHJi1iNo8Ot4,46
|
7
7
|
seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
seleniumbase/behave/behave_helper.py,sha256=elkl8P9eLulRAioLstE9baYNM9N_PHBmAOcajX-pH_Y,24198
|
9
9
|
seleniumbase/behave/behave_sb.py,sha256=qQF85LoohJBfrPK5ZcPi50v-pWtOrC9qcN1B3Ki_3tY,59401
|
@@ -36,7 +36,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0C
|
|
36
36
|
seleniumbase/console_scripts/sb_recorder.py,sha256=fnHb5-kh11Hit-E9Ha-e4QXzqLcZvtij6mb5qNd4B1Q,11032
|
37
37
|
seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
38
38
|
seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
|
39
|
-
seleniumbase/core/browser_launcher.py,sha256=
|
39
|
+
seleniumbase/core/browser_launcher.py,sha256=L7pvPQDMoQ8Mh0rrv3xvVxqsaeavdNp9IShfHpn6DP0,234824
|
40
40
|
seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
|
41
41
|
seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
|
42
42
|
seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
|
@@ -50,7 +50,7 @@ seleniumbase/core/proxy_helper.py,sha256=kZnfkflB3XhuL2h-3inmx3UOLS8VAZ385BGCc4H
|
|
50
50
|
seleniumbase/core/recorder_helper.py,sha256=fNGjbapXmEsht54x1o6Igk198QdnPxDDnjUOzQxNhNQ,25055
|
51
51
|
seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
|
52
52
|
seleniumbase/core/s3_manager.py,sha256=bkeI8I4y19ebWuQG1oEZV5qJbotC6eN8vin31OCNWJk,3521
|
53
|
-
seleniumbase/core/sb_cdp.py,sha256=
|
53
|
+
seleniumbase/core/sb_cdp.py,sha256=R4EkU-2BaJZetebW4zYgYHp945LGmuNvHjVrKebA2wA,76378
|
54
54
|
seleniumbase/core/sb_driver.py,sha256=NGa4adi8OAi2WFtFkEguXg3JCd1p-JuZweIpGNifEfU,13488
|
55
55
|
seleniumbase/core/session_helper.py,sha256=s9zD3PVZEWVzG2h81cCUskbNWLfdjC_LwwQjKptHCak,558
|
56
56
|
seleniumbase/core/settings_parser.py,sha256=gqVohHVlE_5L5Cqe2L24uYrRzvoK-saX8E_Df7_-_3I,7609
|
@@ -65,7 +65,7 @@ seleniumbase/extensions/disable_csp.zip,sha256=YMifIIgEBiLrEFrS1sfW4Exh4br1V4oK1
|
|
65
65
|
seleniumbase/extensions/recorder.zip,sha256=OOyzF-Ize2cSRu1CqhzSAq5vusI9hqLLd2OIApUHesI,11918
|
66
66
|
seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
|
67
67
|
seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
68
|
-
seleniumbase/fixtures/base_case.py,sha256=
|
68
|
+
seleniumbase/fixtures/base_case.py,sha256=7fRj9u0zlOwsHpvyG5Oob7yXXWu8kt3sPAAAk4ZBfi8,721002
|
69
69
|
seleniumbase/fixtures/constants.py,sha256=WMrItuNyKq3XVJ64NluLIRc4gJCxDw8K8qXED0b9S2w,13752
|
70
70
|
seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
|
71
71
|
seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
|
@@ -106,7 +106,7 @@ seleniumbase/translate/portuguese.py,sha256=x3P4qxp56UiI41GoaL7JbUvFRYsgXU1EKjTg
|
|
106
106
|
seleniumbase/translate/russian.py,sha256=TyN9n0b4GRWDEYnHRGw1rfNAscdDmP3F3Y3aySM3C7s,27978
|
107
107
|
seleniumbase/translate/spanish.py,sha256=hh3xgW1Pq122SHYVvJAxFaXhFrjniOVncVbJbfWqOUM,25528
|
108
108
|
seleniumbase/translate/translator.py,sha256=wPhZH6e5NhmebYL1kP2eGxUcVy1gfTb6XCH8ATEPpxE,49238
|
109
|
-
seleniumbase/undetected/__init__.py,sha256=
|
109
|
+
seleniumbase/undetected/__init__.py,sha256=j_5aK0cQrOiPAa8zKKB6bRnOHWb8HD1r-YcVsoGgPYA,24016
|
110
110
|
seleniumbase/undetected/cdp.py,sha256=RLpwZnhUvmK9tgXcZIBBQedwk2q7Jj_EXZkmzI8WUqk,4023
|
111
111
|
seleniumbase/undetected/dprocess.py,sha256=83EV8ZHJWHG1TSUv9JNClBhdgiBXlkCc6mJ--HsoP3k,1681
|
112
112
|
seleniumbase/undetected/options.py,sha256=BoNuwhrG7oOvuLvTwkvsWCF36pMkS1tHCG-XpP4_EkI,3001
|
@@ -116,11 +116,11 @@ seleniumbase/undetected/webelement.py,sha256=_s6evgUkdWJpwOnzX4qR9i796PoVbz3txlz
|
|
116
116
|
seleniumbase/undetected/cdp_driver/__init__.py,sha256=c0TjMwPfVFyoqYOJ7PQ-Jln_L_dpN3ebHyaD-juQoM0,64
|
117
117
|
seleniumbase/undetected/cdp_driver/_contradict.py,sha256=lP4b0h5quAy573ETn_TBbYV889cL1AuPLVInpJ0ZkiU,3183
|
118
118
|
seleniumbase/undetected/cdp_driver/browser.py,sha256=quD0e2aoehXQrs9zxGsobF0kZY11gmJ58Q_JQhheQYg,30144
|
119
|
-
seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=
|
119
|
+
seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=XXpl1tGtbtR5U60Gzq8Lv7pcgpV3un-FLsmGw9lhSnU,17354
|
120
120
|
seleniumbase/undetected/cdp_driver/config.py,sha256=oHFJ3UH0OmLmEGgG5S6SZwbyBs9ZYMsbUJ02QCA7iZc,12044
|
121
121
|
seleniumbase/undetected/cdp_driver/connection.py,sha256=sOTUGjbUqKA2hPvDcRCdqw1VQjVGJs7mbgVvzS7ldtE,23360
|
122
122
|
seleniumbase/undetected/cdp_driver/element.py,sha256=FIC6v7OmumLCT-_vIc3H4oju_oBbaLpWJUJIKm2c_q4,40467
|
123
|
-
seleniumbase/undetected/cdp_driver/tab.py,sha256=
|
123
|
+
seleniumbase/undetected/cdp_driver/tab.py,sha256=rcASsWY_mC7L0wXpFSWM5mtojzA47qG9BWEMXe7ZGF8,50906
|
124
124
|
seleniumbase/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
125
125
|
seleniumbase/utilities/selenium_grid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
126
126
|
seleniumbase/utilities/selenium_grid/download_selenium_server.py,sha256=ZdoInIbhtmdKCIPxxtJHhd2sqotqcNXWMYbwWrkh9O0,1727
|
@@ -135,9 +135,9 @@ seleniumbase/utilities/selenium_grid/start-grid-hub.bat,sha256=Ftq-GrAKRYH2ssDPr
|
|
135
135
|
seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443QFK8PryBpDmKn5Gy0s4o0vDSM,106
|
136
136
|
seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
137
137
|
seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
|
138
|
-
seleniumbase-4.34.
|
139
|
-
seleniumbase-4.34.
|
140
|
-
seleniumbase-4.34.
|
141
|
-
seleniumbase-4.34.
|
142
|
-
seleniumbase-4.34.
|
143
|
-
seleniumbase-4.34.
|
138
|
+
seleniumbase-4.34.9.dist-info/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
|
139
|
+
seleniumbase-4.34.9.dist-info/METADATA,sha256=clXFKbRCvsQnCh9H60fDWCbyhuR8oTt1VmdGlaoysAE,86519
|
140
|
+
seleniumbase-4.34.9.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
141
|
+
seleniumbase-4.34.9.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
|
142
|
+
seleniumbase-4.34.9.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
|
143
|
+
seleniumbase-4.34.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|