o
    j_/                     @   s  d dl Z d dlZd dl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 dlmZ ddlmZ ddlmZ dd	lmZ d dlZG d
d dZdZdZdZdejfddZddddZdededefddZdedefddZ de!fddZ"dHdd Z#d!d" Z$d#d$ Z%d%d& Z&dId(d)Z'd*d+ Z(d,d- Z)d.d/ Z*d0ede!fd1d2Z+dedefd3d4Z,d5e-de!fd6d7Z.dJd:d;Z/	=	dKd>d?Z0d@dA Z1dBdC Z2dDdE Z3dFdG Z4dS )L    N)urljoin)Faker)requests)BeautifulSoup   )core)FwcimAmazon)	CseAmazonc                   @   s   e Zd Zedd ZdS )Logc                 C   s   t t|  d S N)_logging	getLogger__name__debug)m r   +/Users/user/Downloads/amz/amazon/helpers.pyr      s   z	Log.debugN)r   
__module____qualname__staticmethodr   r   r   r   r   r
      s    r
   aV  rwLCVK_8hcUgil9KQiN7RbtmcJV5Pt12CwbhZ1h9fvdbVRILCanjv2RNSW9l-Mq0fnRq6DLTLzX3J3TuVCZQ1wjfa-Ef1BDeXnVNaY4q0Vvl2e1e9UF-uwyK5mDyiftlPt5JcsRuFXU1dMSb5TwDiFV1UlGOc-db33zi1MlmrL5L7iyfqBQmlEoa5el5pFbmeK2wSOKBZtJja-dbVzde0jrpGlVhHDZOAlH7g8aTftqwHLVP27T9Pr0UJtaj9LIX-sg_K9-Pl7H2W9BJDTJLJi_EAAqBHTrRueejO3XbEuSGrsrphCk0ZlYqoLkobey-kubWTba5kzsWL-huF--tzQZ 973900addb061fbe5bb4ea871e9d8161)z	gmail.comzoutlook.comreturnc                  C   s   t d } | d  d | d  d }}tj||| d| dtdd t j	d d	  | t
d
 | tdd dt
t dS )NZen_USnamer    ZPassi  i'     z._-i  @)Zf_nameZl_namer   passwordZmail)r   ZprofilesplittypesSimpleNamespacerandomZrandintuuidZuuid4hexchoiceEMAIL_DOMAINS)pZfirstZlastr   r   r   generateFakeProfile   s   "",r&   zes-MX,es;q=0.9,en;q=0.8zen-US,en;q=0.9zen-CA,en;q=0.9,fr;q=0.8)MXUSCAphoneamazon_countryc                 C   sN   t dd| }t|dkr|drdS |dkr t|dkr dS tj||S )Nz\D    1r(   r'   
   )reZsublen
startswithr   AMAZON_COUNTRY_CODE_MAPget)r*   r+   Zdigitsr   r   r   phone_country_code'   s   r5   domainc                 C   s   |  dr| S d|  S )N.)r2   )r6   r   r   r   waf_cookie_domain0   s   r8   c                 C   sF   t | di pi dd}t|tr| dv rdS tt | ddp!dS )Nheadersx-amzn-waf-actionr,   Z	challengecaptchaTtext)getattrr4   
isinstancestrlowerpage_needs_waf)Zrespactionr   r   r   response_needs_waf4   s   rD   c              
   C   sd  ddl m} t|p
d}	|r|dpd }
|
dv rd}	|	s>z| j| ddd	}t|}	|	r3|j}W n	 ty=   Y nw |	sB| S |rH|d
 zK|| dt||dj	|| d}|dr| j
jd|d t|dd ttd|dd d| d W | S ttd|d  W | S  ty } zttd|  W Y d }~| S d }~ww )Nr   )AwsWafr,   r:   r;   T/   timeoutzSolving WAF challenge...)Z
websiteURLproxy	userAgent)htmlsessionstatuszaws-waf-tokenZtoken)r6   pathzWAF token (Z	timeTaken?z	, domain=)zWAF failed: descriptionzWAF error: )wafrE   rB   r4   rA   rD   r=   	ExceptionnormalizeProxyZsolvecookiessetr8   r   r   r   infowarning)rM   base_urlr6   rJ   uaZ	page_htmlZpage_headersZ	on_statusrE   ZneedsrC   ZprobeZwrer   r   r   ensure_waf_token;   sX   

 r]   c              
   C   s4  t   ttj}tj|d}ttj}t j	}|s$t | |d t j	}|d }|d }|d }	t
td|d }
|rLd|v rA|nd	| }||d
|_|ji d|ddddddddddddddddddddd d!d"d#d$d%d&|
d'|
dt
|	t
|	t
|t
|d(d)d*d+ ||fS ),N)Zimpersonate)locationrK   Zscreenwidthdprr   ZdeviceMemory://http://)ZhttpZhttpsz
User-AgentZAcceptztext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7zAccept-Languagezen-USzAccept-Encodingzgzip, deflate, br, zstdUpgrade-Insecure-Requestsr.   Sec-Fetch-DestdocumentSec-Fetch-ModenavigateSec-Fetch-SiteZnoneSec-Fetch-User?1z	sec-ch-uaz("Chromium";v="120", "Not:A-Brand";v="99"zsec-ch-ua-mobilez?0zsec-ch-ua-platformz	"Windows"zsec-ch-ua-full-version-listz4"Chromium";v="120.0.0.0", "Not:A-Brand";v="99.0.0.0"zsec-ch-ua-platform-versionz"10.0"zdevice-memoryzsec-ch-device-memoryZ4gZ50Z10)z
sec-ch-dprzviewport-widthzsec-ch-viewport-widthZectZrttZdownlink)r   Zreset_sessionr    r#   r   IMPERSONATE_BROWSERSr   ZSessionUSER_AGENTSZ_session_profiler@   minZproxiesr9   update)ZbaseUrlr6   rJ   ZbrowsersUAZ	fpProfileZscrZvpr`   ZdevMemZpxr   r   r   buildSessiong   sn   		


rq   c                 C   sZ   |  dd|i}|r|ddS |  dd|i}|r+|j ddd}|r)|ddS d S d S )	Ninputr   valuer,   ZselectZoptionT)Zselected)findr4   )rL   r   ZelZselZoptr   r   r   getHiddenField   s   ru   c                 C   s(   | j ||d|t|dddddddd	S )
N!application/x-www-form-urlencodedre   rg   same-originrj   r.   zContent-TypeZOriginZRefererrd   rf   rh   ri   rc   #   datar9   rI   )postr@   )ro   urlr{   refereroriginr   r   r   postForm   s   
r   r,   c              	   C   s   t | ||||||d d S )N)r^   rK   referrerZdynamicUrlsZinlineHashesZ
emailValuecustomerName	metadata1)r   generateMetadata)r^   r   urlshashesr[   emailr   r   r   r   r      s
   r   c                 C   s   g }t d| t jD ] }t dt dt dfD ]}|dd ||D  qq
|  g }t| ddD ]/}|	d	sh|j
rh|j
 }|rhd
}|D ]}d| t| d@ }qN|dkrc|d8 }|| q9||fS )Nz"<script[\s\S]*?>[\s\S]*?<\/script>z(load\.js\([\'"](https?://[^\'"]+)[\'"]\)z,ue\.uels\([\'"](https?://[^\'"]+\.js)[\'"]\)zDsrc=["\'](https://static\.siege-amazon\.com/[^\'"]+\.js\?v=\d+)["\']c                 s   s    | ]}| d V  qdS )r   N)group).0r   r   r   r   	<genexpr>   s    z!extractScripts.<locals>.<genexpr>html.parserZscriptZsrcr      l    l        l        )r0   ZfindallZ
IGNORECASEcompileextendZfinditerreverser   Zfind_allr4   stringstripordappend)ZhtmlContentr   Zscr%   r   chZchr   r   r   extractScripts   s(   

r   c                 C   s$  t |jd}t|j\}}tt|jt||p||p||||jd}ttt	d}|
|j}|ds>td|d| td|
 dt| d	t|d
  d t| | dt|ddt|dt|dt|dt|dt|dptdt|dpzdt|dp|	||j|d
 |d |dd|j|S )Nr   )r   r   zsi:md5rN   zCSE encrypt failed: rR   [z] md1=zc pwd=encryptedPasswordr   z/ap/registerappActionTokenREGISTERopenid.return_toprevRIDworkflowStateanti-csrftoken-a2zclaimCollectionLayoutTypeZunifiedAuthClaimCollectionunifiedAuthTreatmentZT2countryCodeZencryptedPasswordCheckr,   )r   Z	appActionr   r   r   r   r   r   r   r   r   ZencryptedPwdZencryptedPwdCheckr   ZencryptedPasswordExpected)r   r=   r   r   r@   r}   r   r	   	CSE_JWK_N
CSE_KEY_IDencryptr   r4   RuntimeErrorr
   r   r1   r   ru   )ro   ZpagerefZ
phoneShortuserrp   ZflowBaseZdynUrlsZ	dynHashesZ	ccDefaultZlabelZphZpuZphhZmdcseZencr   r   r   submitRegister   s*   *
*

r   c                 C   s   | sd S d| v r
| S d|  S )Nra   rb   r   )rJ   r   r   r   rU      s   rU   rL   c                 C   s   t td| S )Nz&src="https://[^"]+/challenge[^"]*\.js")boolr0   search)rL   r   r   r   rB      s   rB   c                    s   | d}g }t }z7 jjD ]0}t|ddpd d}||v s%||r?|j|f}||vr?|| ||j d|j	  qW n	 t
yJ   Y nw |sY fdd j D }d|S )	uE   Exporta cookies priorizando el dominio del país (ej. amazon.com.mx).r7   r6   Nr,   =c                    s"   g | ]}| d  j | qS )r   )rV   r4   r   krM   r   r   
<listcomp>   s   " z*export_session_cookies.<locals>.<listcomp>z; )lstriprW   rV   Zjarr>   endswithr   addr   rs   rT   keysjoin)rM   r6   ZdomZpartsseenr   Zcdkeyr   r   r   export_session_cookies   s&   



r   excc                    s"   t |   t fdddD S )Nc                 3   s    | ]}| v V  qd S r   r   r   msgr   r   r      s    z+_is_transient_curl_error.<locals>.<genexpr>)ZcurlZtlsZsslzconnection resetz	timed outzconnection refusedzinvalid libraryZopenssl)r@   rA   any)r   r   r   r   _is_transient_curl_error   s   r   ry      c                 C   s   | }d}t |D ]Y}	z|j||d|fW   S  tya }
 z?|
}|	|d ks*t|
s+ ttd|	d  d| d|
  t	d|	d   |durW|rW|rWt
|||\}}W Y d}
~
qd}
~
ww |)u6   GET con reintentos; recrea sesión si falla TLS/proxy.NrH   r   HTTP retry rF   : r   )ranger4   rT   r   r   r   r   rY   timesleeprq   )rM   r}   rI   retriesrJ   rZ   r6   ro   last_errattemptr\   _r   r   r   get_with_retry   s$   

r   <      c
                 C   s   | }
d }d|t |dddddd}t|D ][}z|
j||||d|
fW   S  typ } z?|}||d	 ks9t|s: ttd
|d	  d| d|  t	
d|d	   |d urf|rf|	rft||	|\}
}W Y d }~qd }~ww |)Nrv   re   rg   rw   rj   r.   rx   rz   r   r   rF   r   g      ?)r@   r   r|   rT   r   r   r   r   rY   r   r   rq   )rM   r}   r{   r~   r   rI   r   rJ   rZ   r6   ro   r   r9   r   r\   r   r   r   r   post_with_retry  s,   


r   c                    s:   t  fdddD sttd od vod  vS )Nc                 3       | ]	}|   v V  qd S r   rA   r   tr   r   r   !      zisOtp.<locals>.<genexpr>)zverify your identityzverification codezwe sent a codezconfirma tu identidadzconfirme su identidadzverify mobileu   enviamos un códigou   te enviamos un códigozname="code"data-external-idzse ha producido un error)r   r   r0   r   rA   r   r   r   r   isOtp   s   
r   c                 C   s   d| v od|   v pd| v S )Nr   ZaamationzAuthentication requiredr   r   r   r   r   	isCaptcha'     r   c                    s   t  fdddD S )Nc                 3   r   r   r   r   r   r   r   r   +  r   zisUnusual.<locals>.<genexpr>)zunusual activityzaren't able to createzactividad inusualzno podemos crear)r   r   r   r   r   	isUnusual*  s   r   c                 C   s   d| v od| v pd|   v S )Nr   r   registerr   r   r   r   r   	isRegForm-  r   r   )NNN)r,   r,   )ry   r   NNN)r   r   NNN)5ossysr    r0   r   r   r!   Zurllib.parser   Zfakerr   Z	curl_cffir   Zbs4r   r,   r   Zfwcimr   r   r	   Zloggingr   r
   r   r   r$   r   r&   Z_LOCALEr@   r5   r8   r   rD   r]   rq   ru   r   r   r   r   rU   rB   r   rT   r   r   r   r   r   r   r   r   r   r   r   <module>   sP   8 	
,%



