@@ -258,13 +258,13 @@ async def start(
258
258
config : Optional [Config ] = None ,
259
259
* ,
260
260
user_data_dir : Optional [PathLike ] = None ,
261
- headless : Optional [bool ] = False ,
262
- incognito : Optional [bool ] = False ,
263
- guest : Optional [bool ] = False ,
261
+ headless : Optional [bool ] = None ,
262
+ incognito : Optional [bool ] = None ,
263
+ guest : Optional [bool ] = None ,
264
264
browser_executable_path : Optional [PathLike ] = None ,
265
265
browser_args : Optional [List [str ]] = None ,
266
266
xvfb_metrics : Optional [List [str ]] = None , # "Width,Height" for Linux
267
- ad_block : Optional [bool ] = False ,
267
+ ad_block : Optional [bool ] = None ,
268
268
sandbox : Optional [bool ] = True ,
269
269
lang : Optional [str ] = None , # Set the Language Locale Code
270
270
host : Optional [str ] = None , # Chrome remote-debugging-host
@@ -318,6 +318,210 @@ async def start(
318
318
(For example, ensuring shadow-root is always in "open" mode.)
319
319
:type expert: bool
320
320
"""
321
+ sys_argv = sys .argv
322
+ arg_join = " " .join (sys_argv )
323
+ if headless is None :
324
+ if "--headless" in sys_argv :
325
+ headless = True
326
+ else :
327
+ headless = False
328
+ if headed is None :
329
+ if "--gui" in sys_argv or "--headed" in sys_argv :
330
+ headed = True
331
+ else :
332
+ headed = False
333
+ if xvfb is None :
334
+ if "--xvfb" in sys_argv :
335
+ xvfb = True
336
+ else :
337
+ xvfb = False
338
+ if incognito is None :
339
+ if "--incognito" in sys_argv :
340
+ incognito = True
341
+ else :
342
+ incognito = False
343
+ if guest is None :
344
+ if "--guest" in sys_argv :
345
+ guest = True
346
+ else :
347
+ guest = False
348
+ if ad_block is None :
349
+ if "--ad-block" in sys_argv or "--ad_block" in sys_argv :
350
+ ad_block = True
351
+ else :
352
+ ad_block = False
353
+ if xvfb_metrics is None and "--xvfb-metrics" in arg_join :
354
+ x_m = xvfb_metrics
355
+ count = 0
356
+ for arg in sys_argv :
357
+ if arg .startswith ("--xvfb-metrics=" ):
358
+ x_m = arg .split ("--xvfb-metrics=" )[1 ]
359
+ break
360
+ elif arg == "--xvfb-metrics" and len (sys_argv ) > count + 1 :
361
+ x_m = sys_argv [count + 1 ]
362
+ if x_m .startswith ("-" ):
363
+ x_m = None
364
+ break
365
+ count += 1
366
+ if x_m :
367
+ if x_m .startswith ('"' ) and x_m .endswith ('"' ):
368
+ x_m = x_m [1 :- 1 ]
369
+ elif x_m .startswith ("'" ) and x_m .endswith ("'" ):
370
+ x_m = x_m [1 :- 1 ]
371
+ xvfb_metrics = x_m
372
+ if agent is None and "user_agent" not in kwargs and "--agent" in arg_join :
373
+ count = 0
374
+ for arg in sys_argv :
375
+ if arg .startswith ("--agent=" ):
376
+ agent = arg .split ("--agent=" )[1 ]
377
+ break
378
+ elif arg == "--agent" and len (sys_argv ) > count + 1 :
379
+ agent = sys_argv [count + 1 ]
380
+ if agent .startswith ("-" ):
381
+ agent = None
382
+ break
383
+ count += 1
384
+ if agent :
385
+ if agent .startswith ('"' ) and agent .endswith ('"' ):
386
+ agent = agent [1 :- 1 ]
387
+ elif agent .startswith ("'" ) and agent .endswith ("'" ):
388
+ agent = agent [1 :- 1 ]
389
+ if (
390
+ geoloc is None
391
+ and "geolocation" not in kwargs
392
+ and "--geolocation" in arg_join
393
+ ):
394
+ count = 0
395
+ for arg in sys_argv :
396
+ if arg .startswith ("--geolocation=" ):
397
+ geoloc = arg .split ("--geolocation=" )[1 ]
398
+ break
399
+ elif arg == "--geolocation" and len (sys_argv ) > count + 1 :
400
+ geoloc = sys_argv [count + 1 ]
401
+ if geoloc .startswith ("-" ):
402
+ geoloc = None
403
+ break
404
+ count += 1
405
+ if geoloc :
406
+ if geoloc .startswith ('"' ) and geoloc .endswith ('"' ):
407
+ geoloc = geoloc [1 :- 1 ]
408
+ elif geoloc .startswith ("'" ) and geoloc .endswith ("'" ):
409
+ geoloc = geoloc [1 :- 1 ]
410
+ if geoloc :
411
+ import ast
412
+ geoloc = ast .literal_eval (geoloc )
413
+ if not lang and "locale" not in kwargs and "locale_code" not in kwargs :
414
+ if "--locale" in arg_join :
415
+ count = 0
416
+ for arg in sys_argv :
417
+ if arg .startswith ("--locale=" ):
418
+ lang = arg .split ("--locale=" )[1 ]
419
+ break
420
+ elif arg == "--locale" and len (sys_argv ) > count + 1 :
421
+ lang = sys_argv [count + 1 ]
422
+ if lang .startswith ("-" ):
423
+ lang = None
424
+ break
425
+ count += 1
426
+ elif "--lang" in arg_join :
427
+ count = 0
428
+ for arg in sys_argv :
429
+ if arg .startswith ("--lang=" ):
430
+ lang = arg .split ("--lang=" )[1 ]
431
+ break
432
+ elif arg == "--lang" and len (sys_argv ) > count + 1 :
433
+ lang = sys_argv [count + 1 ]
434
+ if lang .startswith ("-" ):
435
+ lang = None
436
+ break
437
+ count += 1
438
+ if lang :
439
+ if lang .startswith ('"' ) and lang .endswith ('"' ):
440
+ lang = lang [1 :- 1 ]
441
+ elif lang .startswith ("'" ) and lang .endswith ("'" ):
442
+ lang = lang [1 :- 1 ]
443
+ if not browser_executable_path and "binary_location" not in kwargs :
444
+ bin_loc = None
445
+ if "--binary-location" in arg_join or "--binary_location" in arg_join :
446
+ bin_loc_cmd = "--binary-location"
447
+ if "--binary_location" in arg_join :
448
+ bin_loc_cmd = "--binary_location"
449
+ count = 0
450
+ bin_loc = None
451
+ for arg in sys_argv :
452
+ if arg .startswith ("%s=" % bin_loc_cmd ):
453
+ bin_loc = arg .split ("%s=" % bin_loc_cmd )[1 ]
454
+ break
455
+ elif arg == bin_loc_cmd and len (sys_argv ) > count + 1 :
456
+ bin_loc = sys_argv [count + 1 ]
457
+ if bin_loc .startswith ("-" ):
458
+ bin_loc = None
459
+ break
460
+ count += 1
461
+ elif "--bl=" in arg_join :
462
+ count = 0
463
+ bin_loc = None
464
+ for arg in sys_argv :
465
+ if arg .startswith ("--bl=" ):
466
+ bin_loc = arg .split ("--bl=" )[1 ]
467
+ break
468
+ count += 1
469
+ if bin_loc :
470
+ if bin_loc .startswith ('"' ) and bin_loc .endswith ('"' ):
471
+ bin_loc = bin_loc [1 :- 1 ]
472
+ elif bin_loc .startswith ("'" ) and bin_loc .endswith ("'" ):
473
+ bin_loc = bin_loc [1 :- 1 ]
474
+ if bin_loc and not os .path .exists (bin_loc ):
475
+ print (" No browser executable at PATH {%s}! " % bin_loc )
476
+ print (" Using default Chrome browser instead!" )
477
+ bin_loc = None
478
+ browser_executable_path = bin_loc
479
+ if proxy is None and "--proxy" in arg_join :
480
+ proxy_string = None
481
+ if "--proxy=" in arg_join :
482
+ proxy_string = arg_join .split ("--proxy=" )[1 ].split (" " )[0 ]
483
+ elif "--proxy " in arg_join :
484
+ proxy_string = arg_join .split ("--proxy " )[1 ].split (" " )[0 ]
485
+ if proxy_string :
486
+ if proxy_string .startswith ('"' ) and proxy_string .endswith ('"' ):
487
+ proxy_string = proxy_string [1 :- 1 ]
488
+ elif proxy_string .startswith ("'" ) and proxy_string .endswith ("'" ):
489
+ proxy_string = proxy_string [1 :- 1 ]
490
+ proxy = proxy_string
491
+ if tzone is None and "timezone" not in kwargs and "--timezone" in arg_join :
492
+ tz_string = None
493
+ if "--timezone=" in arg_join :
494
+ tz_string = arg_join .split ("--timezone=" )[1 ].split (" " )[0 ]
495
+ elif "--timezone " in arg_join :
496
+ tz_string = arg_join .split ("--timezone " )[1 ].split (" " )[0 ]
497
+ if tz_string :
498
+ if tz_string .startswith ('"' ) and tz_string .endswith ('"' ):
499
+ tz_string = proxy_string [1 :- 1 ]
500
+ elif tz_string .startswith ("'" ) and tz_string .endswith ("'" ):
501
+ tz_string = proxy_string [1 :- 1 ]
502
+ tzone = tz_string
503
+ platform_var = None
504
+ if (
505
+ "platform" not in kwargs
506
+ and "plat" not in kwargs
507
+ and "--platform" in arg_join
508
+ ):
509
+ count = 0
510
+ for arg in sys_argv :
511
+ if arg .startswith ("--platform=" ):
512
+ platform_var = arg .split ("--platform=" )[1 ]
513
+ break
514
+ elif arg == "--platform" and len (sys_argv ) > count + 1 :
515
+ platform_var = sys_argv [count + 1 ]
516
+ if platform_var .startswith ("-" ):
517
+ platform_var = None
518
+ break
519
+ count += 1
520
+ if platform_var :
521
+ if platform_var .startswith ('"' ) and platform_var .endswith ('"' ):
522
+ platform_var = platform_var [1 :- 1 ]
523
+ elif platform_var .startswith ("'" ) and platform_var .endswith ("'" ):
524
+ platform_var = platform_var [1 :- 1 ]
321
525
if IS_LINUX and not headless and not headed and not xvfb :
322
526
xvfb = True # The default setting on Linux
323
527
__activate_virtual_display_as_needed (headless , headed , xvfb , xvfb_metrics )
@@ -404,6 +608,8 @@ async def start(
404
608
sb_config ._cdp_platform = kwargs ["platform" ]
405
609
elif "plat" in kwargs :
406
610
sb_config ._cdp_platform = kwargs ["plat" ]
611
+ elif platform_var :
612
+ sb_config ._cdp_platform = platform_var
407
613
else :
408
614
sb_config ._cdp_platform = None
409
615
return driver
0 commit comments