
    hg                     6   d dl Z d dlZd dl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mZ d dlmZ  e j        e          Z e j        d          Z e j                    Ze                    e           e                    e            G d	 d
          ZdS )    N)randint)NoSuchElementExceptionWebDriverException)By)Keys)expected_conditions)WebDriverWaitz4%(asctime)s - %(name)s - %(levelname)s - %(message)sc                       e Zd Zed             Zed             Zed             Zed             Zed             Zed             Z	ed             Z
edd	            Zed
             ZdS )	Utilitiesc                     	 |                                   |                                  dS # t          $ r8}t                              d                    |                     Y d}~dS d}~ww xY w)z,expects driver's instance, closes the driverz!Error at close_driver method : {}N)closequit	Exceptionlogger	exceptionformatdriverexs     _/var/www/fb-scrape/myenv/lib/python3.11/site-packages/facebook_page_scraper/driver_utilities.py__close_driverzUtilities.__close_driver   s~    	MLLNNNKKMMMMM 	M 	M 	M@GGKKLLLLLLLLL	Ms   (, 
A.-A))A.c                    	 t          | d                              t          j        t          j        df                     |                     t          j        d          }|                                 dS # t          $ r Y dS t          $ r Y dS t          $ r8}t                              d                    |                     Y d}~dS d}~ww xY w)zexpects driver's instance as a argument and checks if error shows up
        like "We could not process your request. Please try again later" ,
        than click on close button to skip that popup.
   za.layerCancelz&Error at close_error_popup method : {}N)r	   untilECelement_to_be_clickabler   CSS_SELECTORfind_elementclickr   r   r   r   r   r   )r   buttonr   s      r   __close_error_popupzUtilities.__close_error_popup"   s   
	E&"%%++B,F/2-4 -4 5 5 5 ((/JJFLLNNNNN! 	 	 	DD% 	 	 	DD 	E 	E 	E8??CCE E E E E E E E E	E$   A5A9 9
C	C	C-CCc                     	 |                      d           d S # t          $ rR}t                              |            t                              d                    |                     Y d }~d S d }~ww xY w)Nz3window.scrollTo(0, document.body.scrollHeight / 2);z%Error at scroll_down_half method : {})execute_scriptr   r   _Utilities__close_driverr   r   r   r   s     r   __scroll_down_halfzUtilities.__scroll_down_half8   s    	D!!EG G G G G 	D 	D 	D$$V,,,7>>rBBD D D D D D D D D	Ds    
A5AA00A5c                 <   	 |                      d           |                     t          j        d          }|                                 d S # t
          $ r Y d S t          $ r8}t                              d	                    |                     Y d }~d S d }~ww xY w)N/window.scrollTo(0, document.body.scrollHeight);z[aria-label="Close"]z-Error at close_modern_layout_signup_modal: {})
r$   r   r   r   r   r   r   r   r   r   )r   close_buttonr   s      r   "__close_modern_layout_signup_modalz,Utilities.__close_modern_layout_signup_modalC   s    
	L!!AC C C!..!79 9L     % 	 	 	DD 	L 	L 	L?FFrJJL L L L L L L L L	Ls   A	A 
B	B#-BBc                    	 |dk    r|                      d           dS |dk    r|                     t          j        d          }t	          t          dd                    D ]!}|                    t          j                   "t          j
        t          dd                     t	          t          dd	                    D ]#}|                    t          j                   "dS dS # t          $ rR}t                              |            t                              d
                    |                     Y d}~dS d}~ww xY w)zdexpects driver's instance as a argument, and it scrolls down page to the most bottom till the heightoldr(   newbody               z Error at scroll_down method : {}N)r$   r   r   r   ranger   	send_keysr   PAGE_UPtimesleep	PAGE_DOWNr   r   r%   r   r   r   )r   layoutr.   _r   s        r   __scroll_downzUtilities.__scroll_downQ   s^   	L%%EG G G G G5**2?FCCwq!}}-- 1 1ANN4<0000
71a==)))wq!}}-- 3 3ANN4>2222 !
3 3  	L 	L 	L$$V,,,?FFrJJKKKKKKKKK	Ls   C) CC) )
E3AE  Ec                    	 t          | d                              t          j        t          j        df                     |                     t          j        d          }|                                 dS # t          $ r Y dS t          $ r Y dS t          $ r8}t                              d                    |                     Y d}~dS d}~ww xY w)z\expects driver's instance and closes modal that ask for login, by clicking "Not Now" button r   expanding_cta_close_buttonz Error at close_popup method : {}N)r	   r   r   r   r   IDr   r   r   r   r   r   r   r   )r   popup_close_buttonr   s      r   __close_popupzUtilities.__close_popupf   s   	L &"%%++B,F45-7 -7 8 8 8 "(!4!43"5 "5$$&&&&&! 	 	 	DD% 	 	 	DD 	L 	L 	L?FFrJJKKKKKKKKK	Lr"   c                    	 |dk    r|                      t          j        d          }t          t	          dd                    D ]!}|                    t          j                   "t          | |          	                    t          j        t          j        df                     dS |dk    rRt          | |          	                    t          j        t          j        df                     t          d	           dS dS # t          $ r t                              d
           Y dS t           $ r8}t                              d                    |                     Y d}~dS d}~ww xY w)zoexpects driver's instance, wait for posts to show.
        post's CSS class name is userContentWrapper
        r,   r.   r0   r1   z.userContentWrapperTr-   z[aria-posinset]znew layout loadedzNo posts were found!Fz/Error at wait_for_element_to_appear method : {}N)r   r   r   r4   r   r5   r   r9   r	   r   r   presence_of_element_locatedprintr   r   criticalr   r   r   )r   r:   timeoutr.   r;   r   s         r   __wait_for_element_to_appearz&Utilities.__wait_for_element_to_appearz   s   
	**2?FCCwq!}}-- 3 3ANN4>2222fg..44R5S_&;<6> 6> ? ? ?t5fg..442BOEV3WXXZ Z Z)***t ! " 	 	 	OO233355  	 	 	AHHLLN N N55555	s%   B&D *AD $E,+	E,4-E''E,Nc                    	 |s!|                     t          j        d          }n |                     t          j        |          }|                     d|           dS # t          $ r Y dS t
          $ r Y dS t          $ r Y dS t          $ r8}t          	                    d
                    |                     Y d}~dS d}~ww xY w)z_expects driver's instance and selenium element, click on "see more" link to open hidden contentzspan.see_more_link_innerzarguments[0].click();z#Error at click_see_more method : {}N)r   r   r   r$   r   AttributeError
IndexErrorr   r   r   r   )r   contentselectorelementr   s        r   __click_see_morezUtilities.__click_see_more   s   	O 9!..O%?A A "..r/79 9 !!"97CCCCC% 	 	 	DD 	 	 	DD 	 	 	DD 	O 	O 	OBII"MMNNNNNNNNN	Os*   AA 
C*	C6	C	C-B>>Cc                     	 |                      t          j        d          }|                                 d S # t          $ r&}t
                              d|           Y d }~d S d }~ww xY w)Nz?//div[contains(@aria-label, "Allow")]/../following-sibling::divz*The Cookie Consent Prompt was not found!: )r   r   XPATHr   r   r   info)r   
allow_spanr   s      r   $__close_cookie_consent_modern_layoutz.Utilities.__close_cookie_consent_modern_layout   s    	J**XXZ Z*







 	J 	J 	JKKDbIIIIIIIII	Js   48 
A(A##A()N)__name__
__module____qualname__staticmethodr%   _Utilities__close_error_popup_Utilities__scroll_down_half,_Utilities__close_modern_layout_signup_modal_Utilities__scroll_down_Utilities__close_popup&_Utilities__wait_for_element_to_appear_Utilities__click_see_more._Utilities__close_cookie_consent_modern_layout     r   r   r      s&       M M \M E E \E* D D \D L L \L L L \L( L L \L&   \B O O O \O. J J \J J Jra   r   )loggingsysr7   randomr   selenium.common.exceptionsr   r   selenium.webdriver.common.byr   selenium.webdriver.common.keysr   selenium.webdriver.supportr   r   selenium.webdriver.support.uir	   	getLoggerrT   r   	Formatterr   StreamHandlerchsetFormatter
addHandlerr   r`   ra   r   <module>rp      sI    



       < < < < < < < < + + + + + + / / / / / / @ @ @ @ @ @ 7 7 7 7 7 7		8	$	$		:
< 
<W       "   fJ fJ fJ fJ fJ fJ fJ fJ fJ fJra   