B æ.Ó¬K§Žã@sêdZddlZddlZddlZddlZddlZddlZddddddgZGd d„deƒZ e  ¡Z iZ da daddd„Zdd„Zdd„Zd d œdd„ZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGd d!„d!eƒZGd"d#„d#eƒZeZGd$d%„d%eƒZGd&d'„d'eƒZ Gd(d)„d)eƒZ!Gd*d+„d+eƒZ"d,d-„Z#d.d/„Z$ej%dd0…d1kr¢Gd2d3„d3eƒZ&ej%d4krÎGd5d6„d6eƒZ'Gd7d8„d8eƒZ(d9d:„Z)e*d;kræe)ƒdS)?z?Interfaces for launching and remotely controlling Web browsers.éNÚErrorÚopenÚopen_newÚ open_new_tabÚgetÚregisterc@s eZdZdS)rN)Ú__name__Ú __module__Ú __qualname__©r r ú//opt/alt/python37/lib64/python3.7/webbrowser.pyrsF)Ú preferredc CsZtLtdkrtƒ||gt| ¡<|s4trB|tkrBt d|¡n t |¡WdQRXdS)zRegister a browser connector.Nr)Ú_lockÚ _tryorderÚregister_standard_browsersÚ _browsersÚlowerÚ_os_preferred_browserÚinsertÚappend)ÚnameÚklassÚinstancer r r r rsc Csätdkr&ttdkrtƒWdQRX|dk r6|g}nt}xœ|D]”}d|kr|t |¡}|ddkrrt|dd…ƒSt|ƒSq@yt| ¡}Wnt k r¨t |ƒ}YnX|ddk r¾|dS|ddk r@|dƒSq@Wt dƒ‚dS)zCReturn a browser launcher instance appropriate for the environment.Nz%séÿÿÿÿú&érz!could not locate runnable browser) rrrÚshlexÚsplitÚBackgroundBrowserÚGenericBrowserrrÚKeyErrorÚ _synthesizer)ZusingZ alternativesÚbrowserÚcommandr r r r%s,      Tc CsRtdkr&ttdkrtƒWdQRXx&tD]}t|ƒ}| |||¡r,dSq,WdS)aDisplay url using the default browser. If possible, open url in a location determined by new. - 0: the same browser window (the default). - 1: a new browser window. - 2: a new browser page ("tab"). If possible, autoraise raises the window (the default) or not. NTF)rrrrr)ÚurlÚnewÚ autoraiserr"r r r rGs  cCs t|dƒS)zuOpen url in a new window of the default browser. If not possible, then open url in the only browser window. r)r)r$r r r rZscCs t|dƒS)z…Open url in a new page ("tab") of the default browser. If not possible, then the behavior becomes equivalent to open_new(). é)r)r$r r r rascCs´| ¡d}t |¡sddgStj |¡}yt| ¡}Wntk rRddgSX|d}|r¬| ¡|jkr¬ddl }|  |¡}||_ tj |¡|_t |d||dd|gSddgS)a¿Attempt to synthesize a controller based on existing controllers. This is useful to create a controller when a user specifies a path to an entry in the BROWSER environment variable -- we can copy a general controller to operate using a specific installation of the desired browser in this way. If we can't create a controller in this way, or if there is no executable for the requested browser, return [None, None]. rNr)rr ) rÚshutilÚwhichÚosÚpathÚbasenamerrr Úcopyrr)r"r Úcmdrr#Z controllerr-r r r r!is"     r!c@s:eZdZdZdgZddd„Zddd „Zd d „Zd d „ZdS)Ú BaseBrowserz3Parent class for all browsers. Do not use directly.z%sÚcCs||_||_dS)N)rr,)Úselfrr r r Ú__init__szBaseBrowser.__init__rTcCst‚dS)N)ÚNotImplementedError)r1r$r%r&r r r r”szBaseBrowser.opencCs | |d¡S)Nr)r)r1r$r r r r—szBaseBrowser.open_newcCs | |d¡S)Nr')r)r1r$r r r ršszBaseBrowser.open_new_tabN)r0)rT) rr r Ú__doc__Úargsr2rrrr r r r r/‹s   r/c@s"eZdZdZdd„Zd dd„ZdS) rzVClass for all browsers started with a command and without remote functionality.cCsFt|tƒr||_dg|_n|d|_|dd…|_tj |j¡|_dS)Nz%srr)Ú isinstanceÚstrrr5r*r+r,)r1rr r r r2¢s    zGenericBrowser.__init__rTcsl|jg‡fdd„|jDƒ}y6tjdd…dkr­sz'GenericBrowser.open..éÚwinT)Ú close_fdsF)rr5ÚsysÚplatformÚ subprocessÚPopenÚwaitÚOSError)r1r$r%r&ÚcmdlineÚpr )r$r r¬s   zGenericBrowser.openN)rT)rr r r4r2rr r r r ržs rc@seZdZdZddd„ZdS)rzHClass for all browsers which are to be started in the background.rTcsp|jg‡fdd„|jDƒ}y:tjdd…dkr.r<r=T)r>Ústart_new_sessionF)rr5r?r@rArBÚpollrD)r1r$r%r&rErFr )r$r r½s   zBackgroundBrowser.openN)rT)rr r r4rr r r r r¹src@sBeZdZdZdZdZdZddgZdZdZ dZ dd„Z d d d „Z dS) Ú UnixBrowserz=Parent class for all Unix browsers with remote functionality.NFTz%actionz%sc CsÈg}|r*|jr*t|ƒ}|j|}|r*|g}|jg||}|sD|jrLtj}nd}tj|d||jrd|pfd|dd}|ržy| d¡} | Stj k ršdSXn&|jrº|  ¡dkr´dSdSn | ¡ SdS)NT)r>ÚstdinÚstdoutÚstderrrGéF) Ú raise_optsÚintrÚ backgroundrAÚDEVNULLrBÚredirect_stdoutrCZTimeoutExpiredrH) r1r5Zremoter&Z raise_optZoptrEZinoutrFÚrcr r r Ú_invokeÜs0        zUnixBrowser._invokercs²|dkr|j‰nB|dkr |j‰n2|dkrB|jdkr:|j‰qR|j‰ntdd|ƒ‚‡‡fdd„|jDƒ}dd„|Dƒ}| |d |¡}|sª‡fd d„|jDƒ}| |d d ¡Sd SdS) Nrrr'zBad 'new' parameter to open(); zexpected 0, 1, or 2, got %scs g|]}| dˆ¡ dˆ¡‘qS)z%sz%action)r8)r9r:)Úactionr$r r r; sz$UnixBrowser.open..cSsg|] }|r|‘qSr r )r9r:r r r r;sTcsg|]}| dˆ¡‘qS)z%s)r8)r9r:)r$r r r;sF)Ú remote_actionÚremote_action_newwinÚremote_action_newtabrÚ remote_argsrTr5)r1r$r%r&r5Zsuccessr )rUr$r rÿs$    zUnixBrowser.open)rT) rr r r4rNrPrRrYrVrWrXrTrr r r r rIËs#rIc@s(eZdZdZddgZdZdZdZdZdS) ÚMozillaz$Launcher class for Mozilla browsers.z%actionz%sr0z -new-windowz-new-tabTN) rr r r4rYrVrWrXrPr r r r rZs rZc@s0eZdZdZddgZddgZdZdZdZd Z d S) ÚNetscapez$Launcher class for Netscape browser.z-noraisez-raisez-remotezopenURL(%s%action)r0z ,new-windowz,new-tabTN) rr r r4rNrYrVrWrXrPr r r r r[#sr[c@s,eZdZdZddgZddgZdZdZdZd S) ÚGaleonz,Launcher class for Galeon/Epiphany browsers.z-noraiser0z%actionz%sz-nz-wTN) rr r r4rNrYrVrWrPr r r r r\.s r\c@s(eZdZdZddgZdZdZdZdZdS)ÚChromez)Launcher class for Google Chrome browser.z%actionz%sr0z --new-windowTN) rr r r4rYrVrWrXrPr r r r r]8s r]c@s(eZdZdZddgZdZdZdZdZdS)ÚOperaz!Launcher class for Opera browser.z%actionz%sr0z --new-windowTN) rr r r4rYrVrWrXrPr r r r r^Ds r^c@s,eZdZdZddgZdZdZdZdZdZ dS) ÚElinksz#Launcher class for Elinks browsers.z-remotezopenURL(%s%action)r0z ,new-windowz,new-tabFN) rr r r4rYrVrWrXrPrRr r r r r_Nsr_c@seZdZdZddd„ZdS)Ú Konquerorz±Controller for the KDE File Manager (kfm, or Konqueror). See the output of ``kfmclient --commands`` for more information on the Konqueror remote-control interface. rTcCsä|dkrd}nd}tj}ytjd||gd|||d}Wntk rJYnX| ¡dSy tjdd|gd|||dd }Wntk rŒYnX| ¡dkrždSy tjd d |gd|||dd }Wntk rÒd SX| ¡dkSdS) Nr'ZnewTabZopenURLÚ kfmclientT)r>rJrKrLÚ konquerorz--silent)r>rJrKrLrGÚkfmz-dF)rArQrBrDrCrH)r1r$r%r&rUÚdevnullrFr r r rcs:      zKonqueror.openN)rT)rr r r4rr r r r r`\sr`c@s&eZdZdd„Zdd„Zd dd„Zd S) ÚGrailc CsÖddl}ddl}ddl}ddl}tj | ¡d¡}| t  ¡¡d}tj ||d¡}| |¡}|shdS| |j |j ¡} xX|D]P} y|   | ¡Wn8t k rÈyt | ¡Wnt k rÂYnXYq~X| Sq~WdS)Nrz .grail-unixz-*)ÚglobÚpwdÚsocketÚtempfiler*r+ÚjoinZ gettempdirÚgetpwuidÚgetuidZAF_UNIXZ SOCK_STREAMZconnectrDÚunlink) r1rfrgrhriZtempdirÚuserÚfilenameZmaybesÚsÚfnr r r Ú_find_grail_rc”s*    zGrail._find_grail_rccCs&| ¡}|sdS| |¡| ¡dS)Nrr)rrÚsendÚclose)r1rUrpr r r Ú_remote®s  z Grail._remoterTcCs&|r| d|¡}n| d|¡}|S)NzLOADNEW zLOAD )ru)r1r$r%r&Úokr r r r¶sz Grail.openN)rT)rr r rrrurr r r r resrecCsòt d¡rtddtdƒƒdtjkr>t d¡r>tddtdƒƒdtjkrbt d¡rbtddtdƒƒdtjkr†t d¡r†tdttdƒƒt d¡r tddtdƒƒx&dD]}t |¡r¦t|dt|ƒƒq¦Wx&d D]}t |¡rÎt|dt|ƒƒqÎWt d ¡rtd ttd ƒƒnt d ¡r*td ttd ƒƒx*d D]"}t |¡r0t|dt |ƒƒq0Wt d ¡rrtd dtd ƒƒx*dD]"}t |¡rxt|dt |ƒƒqxWt d¡rºtddt dƒƒt d¡rÖtddtdƒƒt d¡rîtdt dƒdS)Nzxdg-openZGNOME_DESKTOP_SESSION_IDz gvfs-openz gnome-openZKDE_FULL_SESSIONraz x-www-browser)ÚfirefoxZ iceweaselZiceapeÚ seamonkey)zmozilla-firefoxzmozilla-firebirdÚfirebirdÚmozillaÚnetscapercrb)ZgaleonZepiphanyZ skipstone)z google-chromeÚchromeZchromiumzchromium-browserÚoperaZmosaicZgrail) r(r)rrr*Úenvironr`rZr[r\r]r^re)r"r r r Úregister_X_browsersÅsD                rc Cs2gatjdkrNtddtdƒƒtddtdƒƒtddtdƒƒtddtdƒƒtjdd…dkr¼td tƒtj tj   d d ¡d ¡}x4dd dddd|fD]}t   |¡r–t|dt |ƒƒq–Wntj   d¡sÖtj   d¡r&y(d ¡}tj|tjd}| ¡ ¡}Wnttjfk rYnX|atƒtj   d¡rÀt   d¡rPtddtdƒƒt   d¡rltddtdƒƒt   d¡rˆtddtdƒƒt   d¡r¤tddtdƒƒt   d¡rÀtddtdƒƒdtj kr.tj d tj¡}| ¡xF|D]>}|dkrìt|dd}|d dkrìt|dt|ƒddqìWdS)!NÚdarwinÚMacOSXÚdefaultr|rwZsafarir<r=zwindows-defaultZ PROGRAMFILESzC:\Program FileszInternet Explorer\IEXPLORE.EXEryrxrzr{r}ZDISPLAYZWAYLAND_DISPLAYz$xdg-settings get default-web-browser)rLZTERMz www-browserZlinksZelinksZlynxZw3mZBROWSERr0T)r r)rr?r@rÚMacOSXOSAScriptÚWindowsDefaultr*r+rjr~rr(r)rrrAZ check_outputrQÚdecodeÚstripÚFileNotFoundErrorZCalledProcessErrorrrrr_ÚpathsepÚreverser!)Ziexplorer"r.Z raw_resultÚresultZ userchoicesrEr r r rsT             rr<r=c@seZdZddd„ZdS)r„rTcCs,yt |¡Wntk r"dSXdSdS)NFT)r*Z startfilerD)r1r$r%r&r r r rSs zWindowsDefault.openN)rT)rr r rr r r r r„Rsr„r€c@s"eZdZdZdd„Zd dd„ZdS) ra{Launcher class for Aqua browsers on Mac OS X Optionally specify a browser name on instantiation. Note that this will not work for Aqua browsers if the user has moved the application package after installation. If no browser is specified, the default browser, as specified in the Internet System Preferences panel, will be used. cCs ||_dS)N)r)r1rr r r r2mszMacOSX.__init__rTc Cs°d|ks t‚d|krd|}tt|ƒƒ}|jdkrDd| dd¡}n<|jdkrTd }n d |d }d | dd¡}d |j||f}t dd¡}|dkr˜dS| |¡| ¡}| S)Nú'ú:zfile:r‚zopen location "%s"ú"z%22ZOmniWebr0z toWindow %drz OpenURL "%s"z‰tell application "%s" activate %s %s end tellÚ osascriptÚwF) ÚAssertionErrorrOÚboolrr8r*ÚpopenÚwritert) r1r$r%r&ÚscriptZtoWindowr.ÚosapiperSr r r rps"       z MacOSX.openN)rT)rr r r4r2rr r r r rcs rc@seZdZdd„Zddd„ZdS) rƒcCs ||_dS)N)Ú_name)r1rr r r r2’szMacOSXOSAScript.__init__rTcCsb|jdkrd| dd¡}nd|j| dd¡f}t dd¡}|dkrJdS| |¡| ¡}| S) Nr‚zopen location "%s"rz%22zž tell application "%s" activate open location "%s" end rŽrF)r–r8r*r’r“rt)r1r$r%r&r”r•rSr r r r•s   zMacOSXOSAScript.openN)rT)rr r r2rr r r r rƒ‘srƒc Csòddl}dtjd}y| tjdd…d¡\}}WnJ|jk r~}z*t|tjdt|tjdt d¡Wdd}~XYnXd}x*|D]"\}}|dkr d}qŠ|dkrŠd}qŠWt|ƒdkrÔt|tjdt d¡|d}t||ƒtd ƒdS) NrzDUsage: %s [-n | -t] url -n: open new window -t: open new tabrZntd)Úfilez-nz-tr'ú) Úgetoptr?ÚargvÚerrorÚprintrLÚexitÚlenr) r™ZusageZoptsr5ÚmsgZnew_winÚoÚar$r r r Úmain©s(   r¢Ú__main__)N)N)rT)+r4r*rr(r?rAZ threadingÚ__all__Ú ExceptionrÚRLockrrrrrrrrrr!Úobjectr/rrrIrZr[r\r]ZChromiumr^r_r`rerrr@r„rrƒr¢rr r r r ÚsR " "N     45AK .