
    ׸ig                     j    d dl mZmZ d dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d Zd Zd Zy)	    )sync_playwrightTimeoutErrorN)settings)	timedelta)nowc                    | sy| j                         j                         } t        j                  dd|       j                         } t        j                  d|       }|r4t        |j                  d            t        |j                  d            fS t        j                  d|       }|r*t        |j                  d            t        j                  fS t        j                  d|       }|r*t        |j                  d	            t        j                  fS t        j                  d
|       }|rdt        |j                  d	            fS t        j                  d|       }|r*t        t        |j                  d                  }||dz   fS y)zE
        Normalize JD experience into (min_years, max_years)
        )NNz(years|year|yrs|yr) z!(\d+(\.\d+)?)\s*-\s*(\d+(\.\d+)?)      z(\d+(\.\d+)?)\s*\+z (over|more than)\s*(\d+(\.\d+)?)   z#(within|upto|up to)\s*(\d+(\.\d+)?)g        z(\d+(\.\d+)?))
lowerstripresubsearchfloatgroupmathinfint)textmatchmin_vals      '/var/www/talchi_dev/masters/scrapper.pynormalize_jd_experiencer   
   sF    zz|!!#vv,b$7==? 		>EQ(%A*??? 		/6Q($((22 		=tDQ($((22 		@$Gekk!n--- 		*D1%A/0GGaK''    c                 L   t               5 }|j                  j                  dd      }|j                  d   }	 |j	                  dd       	 |j                  dd	
       |j                  dd
       |j                  d       |j                  dd
       |j                  d      j                          |j                  d      j                          |j                  dd
       |j                  d      j                          |j                  dd
       |j                  d      }|j                          d}| j                  }|d   }	|d   }
|d   }|
D cg c]	  }||	vs| }
}|D cg c]  }||	vs||
vs| }}d}dj                  d |	D              }|dz   }t        |      }|
|z   }g }|D ]F  }d| d}|s|nd|z   }|t        |      z   dz   |kD  r n!|j                  |       |t        |      z  }H dj                  |      }| d| d}|j                  |       | j                   }|dk7  rt#        |      \  }}|t%        j&                  |      nd }|t%        j(                  |      nd }|j                  d       j                  d!      }|j                  d"      j                          |j                  d#      j+                  d
       |j                  d$      }|
|dk  s|d%kD  r|j,                  j                          n#|j                  d&| d'      j                          |j                  d(      j                  d!      }|j                  d"      j                          |j                  d#      j+                  d
       |j                  d$      }|
|dk  s|d%kD  r|j.                  j                          n#|j                  d&| d'      j                          |j                  d)      j                          |j                  d*       |j                  d+d,
       d}|d-k  rGd} 	 |j                  d+      }!|!j1                         }"|"| k(  rt3        d/       n0|"} |j4                  j7                  dd0       |j9                  d1       b|j                  d+      }!|!j1                         }#t;        |#      D ]*  }$|d-k\  r n"|!j=                  |$      }%	 |%j                  d2      }&|&j+                  d	
       	 |j?                         5 }'|&j                          d d d        'j@                  }(|(j                          |(j9                  d1       	 |(j                  d4      j.                  j                  d5      jC                         jE                         jG                         })d6|)v r|(jI                          |)|v r3||)   }*tK               tM        d78      z
  }+|*|+k\  r|(jI                          :	 |(jO                         5 },|(j                  d9      j                          d d d        ,j@                  }-|-jQ                         }.tR        jT                   d:}/d;|i}0tW        |.d<      5 }1d=|-jX                  |1fi}2t[        j\                  |/|2|0>      }3d d d        3j^                  d?k7  r(t3        d@|3j`                         |(jI                          |3jc                         }4|4je                  dA      }5|4je                  dB      }6|4je                  dC      }7|4je                  dD      }8|4je                  dE      }9|5r|6r|9dFk(  rdF}:ndG}:tR        jT                   dH};|7|:|8dIdJ}<t[        j\                  |;|<|0K      }=|=j^                  dLvrt3        dM       nBtR        jT                   dN}>| jf                  d.g dOdP}?t[        j\                  |>|?|0K       |dz  }|(jI                          - |d-k  r||j                  dQ      j,                  }@|@j1                         dk(  s@ji                         rt3        dR       n9@j                          |jk                  dS       |j9                  dT       |d-k  rGtm        jn                  dU       dV}A|jI                          d d d        AS # t        $ r |j                  dd
       Y bw xY wc c}w c c}w #  Y xY w# 1 sw Y   xY w#  t3        d3       Y 9xY w#  |(jI                          Y QxY w# 1 sw Y   xY w#  |(jI                          Y vxY w# 1 sw Y   xY w# t        $ r t3        dW       dX}AY tp        $ r!}Bt3        dYts        B             dX}AY d }B~Bd }B~Bww xY w# 1 sw Y   AS xY w)ZNprofile_dataFuser_data_dirheadlessr   z5https://recruiter.foundit.sg/edge/recruiter-dashboarddomcontentloaded
wait_untilz#login_username  timeoutz**/recruiter-dashboard**'	 networkidleztext=Search Candidates:  z4.qs_advance_search button:has-text('Advance Search')z.SearchForm_label-inputTuningz.public-DraftEditor-contentr	   primary_skillssecondary_skillstools_and_frameworks,   AND c              3   (   K   | ]
  }d | d   yw"N .0ps     r   	<genexpr>z&run_scraper_foundit.<locals>.<genexpr>        'BQ!A3a'B    AND (r2   , r
   )Not SpecifiedzC.filters__container__filter__title:has-text('Experience (Minimum)')z..z
.dwn_arrowz,.filters__container__range-dropdown__optionsz+.filters__container__range-dropdown__option2   z5.filters__container__range-dropdown__option:text-is('z Years')zC.filters__container__filter__title:has-text('Experience (Maximum)')zC.Search_LeftStickyFoot-filters button:has-text('Search Candidates')z**/search-results**z .p-card_body_rt_profileContainer0u     Tz"All candidates loaded on this pagei    zbutton:has-text('Resume')Popup failedz.rec-cdp_contactValueBoldspan...   daysz:.rec-cdp_attatchedResume_links button:has-text('Download')0upload_candidate_resume/check_resume_similarity/Authorizationrbfilefilesheaders   Upload check failed:candidate_existshas_existing_resumetemp_file_namedb_dataaction_requirednewupdate.upload_candidate_resume/upload_resume_confirm/founditrS   choicerT   sourcejsonrN   rO      Resume save failedmatched-profiles/	years_of_experiencekeywordsr+   responsibilitiesr-   r,   domain_requirements	educationlocationjd_idregen_filtereligible_search_paramszbutton[aria-label='Next Page']No more pages availablezN() => document.querySelectorAll('.p-card_body_rt_profileContainer').length > 0     Extracted SuccessfullyTimeout occurred during processExtraction FailedUnexpected error:):r   chromiumlaunch_persistent_contextpagesgotowait_for_selectorwait_for_urlPlaywrightTimeoutwait_for_load_statelocatorclicksearch_patternjoinlenappendtyperd   r   r   floorceilwait_forfirstlastcountprintmousewheelwait_for_timeoutrangenthexpect_popupvalue
inner_textr   r   closer   r   expect_downloadpathr   DJANGO_ORIGIN_LINKopensuggested_filenamerequestspoststatus_coder   r^   getrk   is_disabledwait_for_functiontimesleep	Exceptionstr)Cjd_datacandidate_datatokenr6   browserpageeditorkeyword_queryjd_search_patternsprimary	secondarytoolsstmax_lenprimary_partquerycurrent_lenitemsselected_itemsskill	formattedadditionsecondary_tools_groupjd_expjd_minjd_maxexp_min_containermin_optionsexp_max_containermax_optionsprocessed_profilesprevious_countcardscurrent_count
card_counticardresume_button
popup_inforesume_pageemail_value
updated_dtsix_months_agodownload_infodownload	file_pathcandidate_resume_upload_api_urlrN   frM   responsedatarQ   rR   rS   rT   rU   choice_valueconfirm_upload_api_urlconfirm_payloadconfirm_responsematched_profile_reset_api_urlmatched_payloadnext_btnresponse_statusesC                                                                      r   run_scraper_founditr   r   s	   		 va**66( 7 

 }}Qk	2IIG-  
N&&'8$&G!!"<f!M $$]3""#;U"KLL1288:LLOPVVX""#BE"RLL89??A""#@%"P\\"?@FLLNM!(!7!7()9:G*+=>I&'=>E$-Bq'1ABIB %Q1')9ay>PQQEQG"<<'B''BBL 8+Ee*K%EN 	-waL	,:9y@PX.2W<%%i0s8},	- %)IIn$=!+nF3H2IKM KK&00F(!8!@/5/AF+t.4.@6*d$(LLY%'$- " ")),7==?!))*XYbbkpbq"ll+XY>VaZ6B;%%++-LLOPVxW_`eg %)LLY%'$- " ")),7==?!))*XYbbkpbq"ll+XY>VaZ6B;$$**,LLOPVxW_`egLL^_eeg34""#Eu"U!"$q(!" LL)KLE$)KKMM$6BC%2NJJ$$Q-))$/  %GH"[[]
z* S(A)Q. 99Q<D!(,5P(Q%..t.<
!!..0 2J)//12 '1&6&6#779#44T:!'$W%@A!T$WV_'Z\"UW"UW $ +#))+ "n4%3K%@
),1D)D%7'--/$!(88: &m'// \#eg&
 $1#6#6$,MMO	 $667JK 4
  /6Gi. !!'(*E*Eq)I J#+==;"'$+$  ++s24hmmD#))+ #==?D'+xx0B'C$*.((3H*I'%)XX.>%?N"hhy1G&*hh/@&AO+3F/]bJb','/ $667HI + +9".#*"+	'O (0}}., '($ (33:E23  (::;;LM 6
 &-]],0
7+  !9!0$+ +a/*%%'gS(j &)#||,LMSSH~~'1,0D0D0F78NN$**h ))$/i %q(l JJrN6O 	m	vp	 M	 % N!!"<f!MN, CQJ! 2 2!n- !#))+ & &!#))+  B ! 	2341O 	2%s1v.1O	2c	vp	 s5  -fe&b63C)e	c&c*e0	c:c?cM)e-#c#c8!c+25c8(Ad<Ae
d0 d#:$d0#e)e*Geef6cece#c(%e+c50c88ded e#d-(d00eeeef+f-f5fffff#c                    t               5 }|j                  j                  dd      }|j                  d   }	 |j	                  dd       |j                  dd	
      }|j                         dkD  r$|j                          |j                  dd       n|j                  dd       |j                  d       |j                  d      }|j                  d       |j                          |j                  d       |j                  dd       |j                  d      j                          |j                  dd       |j                  d      j                  j                          |j                  dd       |j                  d      }|j                          d}	| j                   }
|
d   }|
d   }|
d   }|D cg c]	  }||vs| }}|D cg c]  }||vs||vs| }}d}dj#                  d |D              }|dz   }t%        |      }||z   }g }|D ]F  }d| d}|s|nd|z   }|t%        |      z   d z   |kD  r n!|j'                  |       |t%        |      z  }H dj#                  |      }| d| d!}	|j)                  |	       | j*                  }|d"k7  rt-        |      \  }}|t/        j0                  |      nd }|t/        j2                  |      nd }|j                  d#      }|j                          |j)                  t5        |      d$%       |j                  d&      }|j                          |j)                  t5        |      d$%       |j                  d'      j                          |j                  d(       |j                  d)d*       d}|d+k  r|j                  d)      } | j                         }!t7        |!      D ]4  }"|d+k\  r n,| j9                  |"      }#	 |#j                  d,      }$|$j                  d       	 |j;                         5 }%|$j                          d d d        %j<                  }&|&j                          |&j                  d-       	 |&j                  d/      j                  j                  d0      jA                         jC                         jE                         }'d1|'v r|&jG                          |'|v r3||'   }(tI               tK        d23      z
  })|(|)k\  r|&jG                          :	 |&jM                         5 }*|&j                  d4      j                  j                          d d d        *j<                  }+|+jO                         },tP        jR                   d5}-d6|i}.tU        |,d7      5 }/d8|+jV                  |/fi}0tY        jZ                  |-|0|.9      }1d d d        1j\                  d:k7  r(t?        d;|1j^                         |&jG                          $|1ja                         }2|2jc                  d<      }3|2jc                  d=      }4|2jc                  d>      }5|2jc                  d?      }6|2jc                  d@      }7|3r|4r|7dAk(  rdA}8ndB}8tP        jR                   dC}9|5|8|6dDdE}:tY        jZ                  |9|:|.F      };|;j\                  dGvrt?        dH       nBtP        jR                   dI}<| jd                  dJg dKdL}=tY        jZ                  |<|=|.F       |d z  }|&jG                          7 |d+k  rr|j                  dM      }>|>j                         dk(  s|>jg                         rt?        dN       n9|>j                          |ji                  dO       |j                  dP       |d+k  rdQ}?to        jp                  dU       |jG                          d d d        |?S c c}w c c}w #  Y xY w# 1 sw Y   xY w#  t?        d.       Y xY w#  |&jG                          Y .xY w# 1 sw Y   xY w#  |&jG                          Y SxY w# 1 sw Y   sxY w# tj        $ r t?        dR       dS}?Y tl        $ r!}@t?        dTt5        @             dS}?Y d }@~@d }@~@ww xY w# 1 sw Y   ?S xY w)VNr   Fr   r   zhttps://recruit.naukri.com/r"   r#   buttonzRegister/Log in)namez**/recruit.naukri**r(   r&   r)   z.xzaIN:has-text('Resdex')i'  r%   z!.I3sTS:has-text('Search Resumes')z.ts-slider__buttonr*   zinput[name='boolKeywords']r	   r+   r,   r-   r.   r/   c              3   (   K   | ]
  }d | d   ywr1   r3   r4   s     r   r7   z%run_scraper_naukri.<locals>.<genexpr>  r8   r9   r:   r2   r;   r
   r<   r=   zinput[name='minExp']d   )delayzinput[name='maxExp']z#adv-search-btnz**/search**z.candidate-headliner?   r@   arA   rB   z.rL5xYrC   rD   rE   rF   z.LS1P2rH   rI   rJ   rK   rL   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   naukrirZ   r]   r_   ra   rb   Trc   rj   zbutton[data-testid='next-page']rn   zA() => document.querySelectorAll('.candidate-headline').length > 0ro   rq   rr   rs   rt   rp   )9r   ru   rv   rw   rx   get_by_roler   r~   rz   r|   r}   r   hoverr   ry   r   r   r   r   r   r   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r^   r   rk   r   r   r{   r   r   r   )Ar   r   r   r6   r   r   login_buttonresdex_menur   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rN   r   rM   r   r   rQ   rR   rS   rT   rU   r   r   r   r   r   r   r   r   r   sA                                                                    r   run_scraper_naukrir     s   		 Ya**66( 7 

 }}QM	2II--  
  ++H;L+ML!!#a'""$!!"7!H!!"7!H$$]3,,'BCK   /!!$'""#FPT"ULL<=CCE""#7"GLL-.44::<""#?"O\\">?FLLNM!(!7!7()9:G*+=>I&'=>E$-Bq'1ABIB %Q1')9ay>PQQEQG"<<'B''BBL 8+Ee*K%EN 	-waL	,:9y@PX.2W<%%i0s8},	- %)IIn$=!+nF3H2IKMKK&00F(!8!@/5/AF+t.4.@6*d$(LL*%! "'')!&&s6{#&>$(LL*%! "'')!&&s6{#&>LL*+113m,""#8%"H!"$q(%:;"[[]
z* S(A)Q. 99Q<D!(,S(9%..t.<
!!..0 2J)//12 '1&6&6#779#44T:!'$WX."U$WV_'Z\"UW"UW $ +#))+ "n4%3K%@
),1D)D%7'--/$!(88: ,m'// (#eEEG,
 $1#6#6$,MMO	 $667JK 4
  /6Gi. !!'(*E*Eq)I J#+==;"'$+$  ++s24hmmD#))+ #==?D'+xx0B'C$*.((3H*I'%)XX.>%?N"hhy1G&*hh/@&AO+3F/]bJb','/ $667HI + +9".#*"*	'O (0}}., '($ (33:E23  (::;;LM 6
 &-]],0
7+  !9!0$+ +a/*%%'gS(j &)#||,MNH~~'1,0D0D0F78NN$**[ ))$/O %q(R 7O 	

2sYv Y CQB! 2 2!n- !#))+ , ,!#))+  @ ! 	2341O 	2%s1v.1O	2gYv s  -a9F`5	^9^9`5	^>^>$^>(H`50#__$_55_+A_+?A`5`*`$`+#`5)`(7G`5`5
%a99
`5_`5___(%`5+` =`5```%"`5(`2-`55a6a9a6a1,a91a66a99b)playwright.sync_apir   r   r{   r   r   r   r   django.confr   datetimer   django.utils.timezoner   r   r   r   r3   r   r   <module>r      s0    R  	      %$Pyv	\r   