
    nhh                     l   d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlZd dlZd dlZd dlmZ  e       ZdZ ej$                  e	      a ej(                         Z G d
 de      Zd Z ee      D ]  Zt&        j5                   e               d Zd Zej;                  d      defd       Zy)    )FastAPI)JSONResponse)	BaseModelField)	webdriver)OptionsN)Service   )maxsizec                   6    e Zd ZU eed<    edd      Zeed<   y)ScrapeRequestcategory_pathzarau+   نام سایت مانند 'zara' یا 'lc')defaultdescriptionsiteN)__name__
__module____qualname__str__annotations__r   r        /var/www/zara/zara.pyr   r      s    f2_`D#`r   r   c                     t               } | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       d| _        t        d      }t	        j
                  || 	      }|j                  d
i        |j                  ddg di       |S )Nz
--headlessz--no-sandboxz--disable-dev-shm-usagez--disable-gpuz--window-size=1280,720z--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.106 Safari/537.36eagerz/usr/bin/chromedriver)serviceoptionszNetwork.enablezNetwork.setBlockedURLsurls)	z*.pngz*.jpgz*.jpegz*.gifz*.webpz*.cssz*.woffz*.woff2z*.ttf)r   add_argumentpage_load_strategyr	   r   Chromeexecute_cdp_cmd)r   r   drvs      r   create_driverr%      s    iG&(23)12  ]  ^!(G -.G


7G
<C ("-0^3  Jr   c                      t         5  	 t        j                         } d d d        	  j                   | S # t        j                  $ r t               } Y 6w xY w# 1 sw Y   ;xY w#  t               cY S xY wN)lockdriver_pool
get_nowaitqueueEmptyr%   titler$   s    r   
get_driverr/   /   sh    	 "	"((*C"		
 {{ 	"/C	"" "s1   A4A# AAAAA #A1c                     t         5  	 t        j                  |        d d d        y # t        j                  $ r | j                          Y .w xY w# 1 sw Y   y xY wr'   )r(   r)   
put_nowaitr+   Fullquitr.   s    r   release_driverr4   >   sP    	 	""3'  zz 	HHJ	 s&   A'#A
AAAAz/scraperequest_datac           	      j   d}d }	 ddd}|j                  | j                  j                               }|s,t        ddd| j                   dd	
      |rt	        |       S S || j
                  z   }t               }|j                  |       |j                  d       |j                  }t        d||t        |      d      |rt	        |       S S # t        $ rE}t        dd|t        |      t        j                         d
      cY d }~|rt	        |       S S d }~ww xY w# |rt	        |       w w xY w)N zhttps://www.zara.com/zhttps://www.lcw.com/)r   lci  Fu   نام سایت 'u"   ' پشتیبانی نمی‌شود)successerror)status_codecontentg333333?T)r9   urlhtmllength)r<   i  )r9   r>   r:   	traceback)getr   lowerr   r4   r   r/   implicitly_waitpage_sourcelen	Exceptionr   r@   
format_exc)r5   r>   r$   	base_urlsbase_urlr=   es          r   scrape_siterK   F   sF   D
C" +(
	
 ==!2!2!8!8!:;C ,\->->,??ab: 2 3 ) 333lC $i	%
  3   V"--/	6
  	 3  3 s7   AC "A C 	D,DDD" DD" "D2)fastapir   fastapi.responsesr   pydanticr   r   seleniumr   !selenium.webdriver.chrome.optionsr   	threadingr@   r+   !selenium.webdriver.chrome.servicer	   app	POOL_SIZEQueuer)   Lockr(   r   r%   range_putr/   r4   postrK   r   r   r   <module>r[      s     * %  5 " " 5 i 	ekk),y~~aI a. 
y	 %AOOMO$% )% m %  % r   