
    /h                     l    d dl Z d dlmZmZ d dlmZ 	 	 ddZddZddZd Z	dd	dd
ddZ
	 	 	 	 ddZy)    N)urljoin	urlencode)loggerc
                   K   |dk(  rt        | |	       d {   S |dk(  rt        | |       d {   S |dk(  rzt        | |dz   |||||j                  d      |j                  d      xs |j                  d      |j                  dd	      t	        |j                  d
d            
       d {   S t        j                  d| d       y7 7 7 "w)Nclickscroll
url_change   extra_paramspagination_numbers_selectortotal_pages_selectorgoto_wait_untildomcontentloadedgoto_timeout`  )
pagepage_numbase_urlpermutation_urlpagination_patternfirst_page_paginationr   r   r   r   z&[ERROR] Nieznana strategia paginacji: z. Przerywam.F)
click_nextscroll_and_detectnext_by_url_changegetintr   error)
r   	selectorspagination_strategyr   r   r   r   r   section_selectornext_selectors
             4/var/www/extractly/link_agregator/utils/next_page.pypaginate_nextr#      s      g%m444		(&t-=>>>		,'\+1"7"~6(16S(T(}XaXeXef|X}%MM*;=OPY]]>5AB
 
 	
 	=>Q=RR^_`% 5>
s2   CCCCA>C/C0CCCc                 *  K   t        |      D ]  }	 | j                  |      }|j                          d {   dk(  rt        j                  d        y|j                          d {    | j                  |       d {    t        j                  d|dz    d        y t        j                  d       y7 7 T7 =# t        $ rF}t        j                  d|dz    d	|        t        j                  d
       d {  7   Y d }~d }~ww xY ww)Nr   u&   ⛔ Brak następnej strony — koniec.Fu.   ➡️ Przechodzę do kolejnej strony (próba r
   )Tu"   ❌ Błąd podczas klikania next ():    uJ   ❌ Nie udało się przejść do następnej strony po wszystkich próbach.)rangelocatorcountr   infor   wait_for_timeout	Exceptionwarningasynciosleep)r   r!   retrywaitattemptnext_buttones          r"   r   r   (   s     <	#,,}5K &&((A-DE##%%%''---KKHSTUVWX   NN_` ) &-  	#NN?!}CPQsST--"""	#sz   D$CB;CDC(B=)CB? C"D;C=C?C	D
6D DDDDDc                 |  K   d}t        |      D ]  }| j                  j                  d|       d {    | j                  d       d {    | j	                  |       d {   }t        |      }||kD  rt        j                  d| d       |}t        j                  d        |dkD  S  |dkD  S 7 7 l7 Uw)Nr   i  u   🆕 Znalazłem u    elementów po scrollu.u2   🔚 Koniec scrollowania (brak nowych elementów).)r(   mousewheelr,   query_selector_alllenr   r+   )r   item_selectormax_scrollsscroll_step
last_countiitems	new_counts           r"   r   r   :   s     J;jjq+...##D)))--m<<J	z!KK*9+5LMN"JKKLM>   > 	/)<s4   0B<B6B<B8B<$B:%AB<8B<:B<c           	          |dk(  r| j                  d|      S | j                  d|j                  dt        |                  S )Nr
   {pagination}z
{{number}})replacestr)r   r   r   r   s       r"   build_page_url_from_permutationrF   J   sF    1}&&~7LMM&&~7I7Q7QR^`cdl`m7noo    r   r   r
   
wait_untiltimeoutrefererretriesc                  K   d}t        |dz         D ]F  }	 t        j                  d| d| d| d|dz    d	       | j                  ||||       d{   c S  |7 	# t        $ r}|}t        j
                  d	|dz    d
|        ||k  rS	 t        j                  d       | j                  |d||       d{  7  cY d}~c S # t        $ r}	|	}Y d}	~	nd}	~	ww xY wY d}~d}~ww xY ww)u   
    Stabilne przejście na URL:
      - od razu lżejszy waitUntil,
      - fallback 1x do waitUntil='commit' przy timeoucie.
    Nr
   z[GOTO] z (waitUntil=z
, timeout=zms, try=r%   )rI   rJ   rK   u   [GOTO] Timeout/błąd (try=r&   u$   [GOTO] Fallback → waitUntil=commitcommit)r(   r   r+   gotor-   r.   )
r   urlrI   rJ   rK   rL   last_errr3   r5   e2s
             r"   	safe_gotorS   Q   s      H1%	"KK'#l:,j	QYZabcZcYddefg3:wX_``` & N a 		"HNN83qcJK "KK"FH!%38W^e!ffff  "!H"		"s|   C.=A AA C.A  	C+)%C&-C	<B?=C	C+C.		CCC&CC&!C.&C++C.c
           	         K   |r	 | j                  |       d {   }
g }|
D ]^  }|j                          d {   }	 t        dj                  t	        t
        j                  |                  }|j                  |       ` t        j                  d|        ||vr|rt        j                  d| d| d       yt        ||||      }t        ||      }d|v rt        j                  d	| d
       y|t        | j                        k(  rt        j                  d       yt        j                  d|        	 t        | |||	t        | j                        d       d {    | j!                  d       d {    y7 j7 N# t        $ r Y sw xY w# t        $ r#}t        j                  d|        Y d }~d }~ww xY w7 c# t        $ r%}t        j                  d| d|        Y d }~yd }~ww xY w7 }w)N z&[PAGINATION] Numery stron na stronie: u   ⛔ Brak numeru z w paginacji (u   ) — koniec (url_change).Fu3   [PAGINATION] Nie udało się sprawdzić paginacji: rC   uO   [ZABEZPIECZENIE] Próbowałem wejść na niepodstawiony link z '{pagination}': u    — przerywam paginację!uC   ⛔ Brak następnej strony — koniec (url_change, url identyczny).u-   [URL_CHANGE] Przechodzę do kolejnej strony: r
   rH   z[URL_CHANGE] goto failed for z: i  T)r9   
inner_textr   joinfilterrE   isdigitappendr-   r   r+   r.   rF   r   rP   rS   r,   )r   r   r   r   r   r   r   r   r   r   elementsnumberseltxtnumr5   next_urls                    r"   r   r   i   s     #	V!445PQQHGMMO+bggfS[[#&>?@CNN3'	  KK@	JKw&7.xjGbFcc}~
 /@RT\^stHx*H!jksjt  uO  P  	Q3txx= YZ
KK?zJK& M
 	
 	
 


$$$U R , !   	VNNPQRPSTUU	V	
  6xj1#FG
 %s   G>F FF FF AF
<F >A?G>>'G %G	&G *G>>G<?G>F F 
	FF FF 	G#G;G>GG>	G 	G9G4/G>4G99G>)NN)r'     )
   ra   )NNr   r   )r/   urllib.parser   r   link_agregator.utils.loggerr   r#   r   r   rF   rS   r    rG   r"   <module>rf      sR     + . D$ p .@X\fg >  $&9rG   