1414from playwright ._impl ._driver import compute_driver_executable , get_driver_env
1515from playwright .async_api import async_playwright , Page , Browser , BrowserType
1616
17- UNIX = "windows" not in platform .system ().lower ()
17+ sys_os = platform .system ()
18+
19+ UNIX = "windows" not in sys_os .lower ()
1820LTE_PY37 = platform .python_version_tuple ()[:2 ] <= ("3" , "7" )
1921
2022SUPPORTED_BROWSERS = ("chromium" , "firefox" , "webkit" )
@@ -408,12 +410,11 @@ def __exit__(self, *args):
408410
409411 def check_is_install (self , browser ):
410412 env = self .get_driver_env ()
411- k = {}
412- if "win" in sys .platform :
413- k ["creationflags" ] = subprocess .CREATE_NO_WINDOW
414-
415413 driver_executable = compute_driver_executable ()
416- completed_process = subprocess .check_output (f"{ driver_executable } install { browser } --dry-run" , env = env , ** k , )
414+
415+ completed_process = subprocess .check_output (f"{ driver_executable } install { browser } --dry-run" , env = env ,
416+ ** creation_flags_dict ())
417+
417418 locale_ = ":" .join (next (filter (lambda x : "Install location" in x ,
418419 completed_process .decode ().split ("\n " )), "" ).split (":" )[1 :]).strip ()
419420
@@ -431,16 +432,12 @@ def get_driver_env():
431432
432433 def run_playwright (self , * args : str ):
433434 env = self .get_driver_env ()
434- k = {}
435- if "win" in sys .platform :
436- k ["creationflags" ] = subprocess .CREATE_NO_WINDOW
437-
438435 driver_executable = compute_driver_executable ()
439436
440437 with subprocess .Popen ([str (driver_executable ), * args ], env = env , stdout = subprocess .PIPE ,
441- stderr = subprocess .STDOUT , ** k ) as process :
438+ stderr = subprocess .STDOUT , ** creation_flags_dict () ) as process :
442439 for line in process .stdout :
443- print (line .decode ('utf-8' ))
440+ Logger . info (line .decode ('utf-8' ))
444441
445442 ####################################################################################################################
446443 async def first_page (self ) -> "Page" :
@@ -455,42 +452,61 @@ async def close(self):
455452 await self .create_task (self .__stop_playwright ())
456453 self .stop ()
457454
458- async def goto (self , url , * args , ** kwargs ):
459- return await self .create_task (self .page .goto (url , * args , ** kwargs ))
455+ async def goto (self , url , * args , page = None , ** kwargs ):
456+ page = page or self .page
457+ return await self .create_task (page .goto (url , * args , ** kwargs ))
460458
461- async def add_script_tag (self , * args , ** kwargs ):
462- return await self .create_task (self .page .add_script_tag (* args , ** kwargs ))
459+ async def add_script_tag (self , * args , page = None , ** kwargs ):
460+ page = page or self .page
461+ return await self .create_task (page .add_script_tag (* args , ** kwargs ))
463462
464- async def expose_function (self , * args , ** kwargs ):
465- return await self .create_task (self .page .expose_function (* args , ** kwargs ))
463+ async def expose_function (self , * args , page = None , ** kwargs ):
464+ page = page or self .page
465+ return await self .create_task (page .expose_function (* args , ** kwargs ))
466466
467- async def page_wait_for_function (self , * args , ** kwargs ):
468- return await self .create_task (self .page .wait_for_function (* args , ** kwargs ))
467+ async def page_wait_for_function (self , * args , page = None , ** kwargs ):
468+ page = page or self .page
469+ return await self .create_task (page .wait_for_function (* args , ** kwargs ))
469470
470- async def page_evaluate (self , * args , ** kwargs ):
471- return await self .create_task (self .page .evaluate (* args , ** kwargs ))
471+ async def page_evaluate (self , * args , page = None , ** kwargs ):
472+ page = page or self .page
473+ return await self .create_task (page .evaluate (* args , ** kwargs ))
472474
473475 ####################################################################################################################
474476 def sleep (self , val , timeout_ = None ):
475477 if timeout_ is None :
476478 timeout_ = val if val > 5 else 5
477479 self .run_threadsafe (asyncio .sleep (val ), timeout_ = timeout_ )
478480
479- def goto_sync (self , url , * args , timeout_ = 60 , ** kwargs ):
480- return self .run_threadsafe (self .page .goto (url , * args , ** kwargs ), timeout_ = timeout_ )
481+ def goto_sync (self , url , * args , page = None , timeout_ = 60 , ** kwargs ):
482+ page = page or self .page
483+ return self .run_threadsafe (page .goto (url , * args , ** kwargs ), timeout_ = timeout_ )
481484
482- def add_script_tag_sync (self , * args , timeout_ = 60 , ** kwargs ):
483- return self .run_threadsafe (self .page .add_script_tag (* args , ** kwargs ), timeout_ = timeout_ )
485+ def add_script_tag_sync (self , * args , page = None , timeout_ = 60 , ** kwargs ):
486+ page = page or self .page
487+ return self .run_threadsafe (page .add_script_tag (* args , ** kwargs ), timeout_ = timeout_ )
484488
485- def expose_function_sync (self , * args , timeout_ = 60 , ** kwargs ):
486- return self .run_threadsafe (self .page .expose_function (* args , ** kwargs ), timeout_ = timeout_ )
489+ def expose_function_sync (self , * args , page = None , timeout_ = 60 , ** kwargs ):
490+ page = page or self .page
491+ return self .run_threadsafe (page .expose_function (* args , ** kwargs ), timeout_ = timeout_ )
487492
488- def page_wait_for_function_sync (self , * args , timeout_ = 60 , ** kwargs ):
489- return self .run_threadsafe (self .page .wait_for_function (* args , ** kwargs ), timeout_ = timeout_ )
493+ def page_wait_for_function_sync (self , * args , page = None , timeout_ = 60 , ** kwargs ):
494+ page = page or self .page
495+ return self .run_threadsafe (page .wait_for_function (* args , ** kwargs ), timeout_ = timeout_ )
490496
491- def page_evaluate_sync (self , * args , timeout_ = 60 , ** kwargs , ):
492- return self .run_threadsafe (self .page .evaluate (* args , ** kwargs ), timeout_ = timeout_ )
497+ def page_evaluate_sync (self , * args , page = None , timeout_ = 60 , ** kwargs , ):
498+ page = page or self .page
499+ return self .run_threadsafe (page .evaluate (* args , ** kwargs ), timeout_ = timeout_ )
493500
494501 def sync_close (self , timeout_ = 60 ):
495502 self .run_threadsafe (self .__stop_playwright (), timeout_ = timeout_ )
496503 self .stop ()
504+
505+
506+ def creation_flags_dict ():
507+ try :
508+ if sys_os == 'Windows' :
509+ return {"creationflags" : subprocess .CREATE_NO_WINDOW }
510+ except :
511+ Logger .exception ("creation_flags_dict" )
512+ return {}
0 commit comments