
    *wiE                        S SK r S SKrS SKrS SKJr  S SKrS SKJr  \" \R                  R                  \R                  R                  \5      S5      5        \R                  S:X  a  \R                  R                  SS9  \R                   " S5      \" \R                   " S	S
5      5      \R                   " S5      \R                   " S5      \R                   " S5      S.rSrSrS rS r\S:X  a  \ R0                  " \" 5       5        gg)    N)load_dotenv)async_playwrightz../.envwin32zutf-8)encodingDB_HOSTDB_PORTi  DB_USERDB_PASSWORDDB_NAME)hostportuserpassworddatabasei  c                   #    U R                  USSS9I S h  vN   [        R                  " [        S-  5      I S h  vN   S S S S.nU R	                  S5      I S h  vN nU GHO  nUR                  S5      I S h  vN nU(       d  M&  UR                  5       I S h  vN R                  5       R                  5       nUR                  S5      I S h  vN nU(       d  M|  S	U;   a4  UR                  5       I S h  vN R                  5       =(       d    S US	'   M  S
U;   aX  UR                  SS5      I S h  vN n[        [        R                  U5      5      n	U	(       a  SR                  U	5      OS US
'   GM  SU;   d  GM  UR                  5       I S h  vN R                  5       =(       d    S US'   GMR     U$  GN GN GNc GNG GN) N N N N:7f)Nnetworkidlei`  )
wait_untiltimeouti  )summarynotice	languagesz#.custom-react-classes-MuiPaper-rootz*h3.custom-react-classes-MuiTypography-rootz&.custom-react-classes-MuiCollapse-rootr   r   spanzAels => els.map(s => s.innerText.trim()).filter(t => t.length > 0)z, r   )gotoasynciosleepPAGE_WAIT_MSquery_selector_allquery_selector
inner_textstriplower
inner_htmleval_on_selector_alllistdictfromkeysjoin)
pageurlresultsectionssectionh3headingcollapse_divspansunique_spanss
             europa_detail.pyscrape_detailr3      s    
))CM5)
AAA
--t+
,,,DAF,,-RSSH))*VWW(//1779$334\]]'3'>'>'@!@ G G I QTF9G#&;;S E  e 45L=I$))L"9tF; &2&=&=&? ?FFHPDF8/ 2 MA B, T X )]
 "A !@s   GF8$GF;GF>G:G; GG4GG&G7G	8;G3G4AG?GG&G;G>GGGG	GGGc            
        #    [         R                  R                  " S#0 [        D6n [	        S5        U R                  SS9n[        (       a	  S[         3OSnUR                  SU 35        UR                  5       nUR                  5         U(       d  [	        S5        U R                  5         g [	        S[        U5       S	35        [        5        IS h  vN nUR                  R                  SS
9I S h  vN nUR                  SS9I S h  vN nUR                  5       I S h  vN nU GH  n[	        SUS    SUS    S35        [	        SUS    35         [!        XxS   5      I S h  vN n	U	S   n
U	S   nU	S   n[	        SU
(       a  U
S S S-   OS 35        [	        SU(       a  US S S-   OS 35        [	        SU=(       d    S 35        U R                  5       nUR                  SXXS   45        UR                  SUS   45        U R#                  5         UR                  5         [	        S5        GM     UR                  5       I S h  vN   S S S 5      IS h  vN   U R                  5         [	        S"5        g  GN GN GNz GNe GN"! [$         a  n[	        S U S!35         S nAGM  S nAff = f Ng NY! , IS h  vN  (       d  f       Nn= f7f)$Nu   ✔  Database connectedT)
dictionaryzLIMIT  zJSELECT id, url, title FROM tenders WHERE source = 'europa' AND detail = 0 z$No pending tenders (detail=0) found.zProcessing u    tender(s)…
)headlesszoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36)
user_agentu   ─── id=idz  [title]z	    URL: r)   r   r   r   z    summary   : P   u   …nullz    notice    : z    languages : zUPDATE tender_details
                       SET summary   = %s,
                           notice    = %s,
                           languages = %s
                       WHERE tender_id = %sz+UPDATE tenders SET detail = 1 WHERE id = %su       ✔  Updated
u       ✖  Error: 
u,   ═══ Detail scraping complete ═══ )mysql	connectorconnect	DB_CONFIGprintcursor
TEST_LIMITexecutefetchallcloselenr   chromiumlaunchnew_contextnew_pager3   commit	Exception)dbrE   limit_clausetenderspbrowsercontextr(   tenderdetailr   r   r   cures                  r2   mainr[   A   s    		 	 	-9	-B	
#$YY$Y'F,6JVJ<(BL
NN
TUaTbc ooG
LLN45

	KG~_
56!!Q

))4)88++E , 
 
 %%''FM&,s6'?2C1EFIfUm_-.0,T%=AA"9-"8,";/	(")=f(UVW(u)<F(STU()<f(=>?iik/
 i> AD\O 				*+= F mmo[ "!^ HHJ	
89a "8
 ( B6  0(2.//0 	[ "!!!s   CKJ KJ;5J6J;JJ;$J	%3J;J*J+CJ7J;J7J;KJ9 !KJ;J;	J;J
J4J/(J;/J44J;9K;KKKK__main__)r   ossysdotenvr   mysql.connectorr@   playwright.async_apir   pathr'   dirname__file__platformstdoutreconfiguregetenvintrC   rF   r   r3   r[   __name__runr?       r2   <module>rm      s     	 
   1 BGGLL2I> ?<<7JJG, 		)$BIIi./		)$		-(		)$	 
!JC:L zKK rl   