
    j_/                        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      ZdZdZdZdej6                  fdZddddZdededefdZdedefdZ de!fdZ"d.dZ#d Z$d Z%d Z&d/dZ'd  Z(d! Z)d" Z*d#ede!fd$Z+dedefd%Z,d&e-de!fd'Z.d0d(Z/	 	 d1d)Z0d* Z1d+ Z2d, Z3d- Z4y)2    N)urljoin)Faker)requests)BeautifulSoup   )core)FwcimAmazon)	CseAmazonc                       e Zd Zed        Zy)Logc                 T    t        j                  t              j                  |        y N)_logging	getLogger__name__debug)ms    5C:\Users\Sxnti\OneDrive\Desktop\amz\amazon\helpers.pyr   z	Log.debug   s    $$X.44Q7    N)r   
__module____qualname__staticmethodr    r   r   r   r      s    7 7r   r   aV  rwLCVK_8hcUgil9KQiN7RbtmcJV5Pt12CwbhZ1h9fvdbVRILCanjv2RNSW9l-Mq0fnRq6DLTLzX3J3TuVCZQ1wjfa-Ef1BDeXnVNaY4q0Vvl2e1e9UF-uwyK5mDyiftlPt5JcsRuFXU1dMSb5TwDiFV1UlGOc-db33zi1MlmrL5L7iyfqBQmlEoa5el5pFbmeK2wSOKBZtJja-dbVzde0jrpGlVhHDZOAlH7g8aTftqwHLVP27T9Pr0UJtaj9LIX-sg_K9-Pl7H2W9BJDTJLJi_EAAqBHTrRueejO3XbEuSGrsrphCk0ZlYqoLkobey-kubWTba5kzsWL-huF--tzQ 973900addb061fbe5bb4ea871e9d8161)z	gmail.comzoutlook.comreturnc                     t        d      j                         } | d   j                         d   | d   j                         d   }}t        j                  ||| d| dt        j                  dd       t        j                         j                  d d	  | t        j                  d
       | t        j                  dd       dt        j                  t                     S )Nen_USnamer    Passi  i'     z._-i  @)f_namel_namer   passwordmail)r   profilesplittypesSimpleNamespacerandomrandintuuiduuid4hexchoiceEMAIL_DOMAINS)pfirstlasts      r   generateFakeProfiler6      s    g AF)//#A&&	(9"(=4E  T5'4&(9tT23DJJL4D4DRa4H3IJwv}}U+,TF6>>!S3I2J!FMMZgLhKij 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                     t        j                  dd|       }t        |      dk(  r|j                  d      ry|dk(  rt        |      dk(  ryt        j
                  j                  ||      S )Nz\D    1r8   r7   
   )resublen
startswithr   AMAZON_COUNTRY_CODE_MAPget)r:   r;   digitss      r   phone_country_coderH   '   s_    VVE2u%F
6{bV..s3#f+"3''++NNKKr   domainc                 2    | j                  d      r| S d|  S )N.)rD   )rI   s    r   waf_cookie_domainrL   0   s     &&s+6=1VH=r   c                     t        | di       xs i j                  dd      }t        |t              r|j	                         dv ryt        t        | dd      xs d      S )Nheadersx-amzn-waf-actionr=   	challengecaptchaTtext)getattrrF   
isinstancestrlowerpage_needs_waf)respactions     r   response_needs_wafr[   4   sW    dIr*0b556I2NF&#6<<>5M#M'$39r::r   c                 j   ddl m} t        |xs d      }	|r)|j                  d      xs dj	                         }
|
dv rd}	|	s0	 | j                  | dd	      }t        |      }	|	r|j                  }|	s| S |r |d
       	  || dt        |      |      j                  ||       }|j                  d      rl| j                  j                  d|d   t        |      d       t        j                  t              j!                  d|j                  dd       d| d       | S t        j                  t              j#                  d|j                  d              	 | S # t        $ r Y w xY w# t        $ r6}t        j                  t              j#                  d|        Y d }~| S d }~ww xY w)Nr   )AwsWafr=   rO   rP   T/   timeoutzSolving WAF challenge...)
websiteURLproxy	userAgent)htmlsessionstatuszaws-waf-tokentoken)rI   pathzWAF token (	timeTaken?z	, domain=)zWAF failed: descriptionzWAF error: )wafr]   rX   rF   rW   r[   rS   	ExceptionnormalizeProxysolvecookiessetrL   r   r   r   infowarning)rf   base_urlrI   rc   ua	page_htmlpage_headers	on_statusr]   needsrZ   probewres                 r   ensure_waf_tokenr   ;   s   9?+E""#67=2DDF--E	KK8*AK;E&u-E!JJ	 ,-@"1~ '
 %Y%
0	 	
 66(OOG(0s    x(--bff[#67yJ N x(00<}@U?V1WX N5  		0  @8$,,{1#->??N@s1   /E$ B#E3 ':E3 $	E0/E03	F2<+F--F2c           
         t        j                          t        j                  t        j
                        }t        j                  |      }t        j                  t        j                        }t         j                  }|st        | |       t         j                  }|d   }|d   }|d   }	t        t        d|d               }
|rd|v r|nd	| }||d
|_        |j                  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)impersonate)locationrd   screenwidthdprr"   deviceMemory://http://)httphttpsz
User-Agent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-Site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-memory4g5010)z
sec-ch-dprzviewport-widthzsec-ch-viewport-widthectrttdownlink)r	   reset_sessionr,   r1   r   IMPERSONATE_BROWSERSr   SessionUSER_AGENTS_session_profilerV   minproxiesrN   update)baseUrlrI   rc   browsersUA	fpProfilescrvpr   devMempxs               r   buildSessionr   g   s   mmD556GW-A	t''	(B,,IW300	
H
C	WB
E
CQ	.123FunUGE7*;"-	II b  \ 	7 	4	
 	$S 	* '7
 EUV\ _opt 	? BTUY \pq| 	&'] `|  ~F 	 "8 	s3x (+3xb'CGDd  b5Lr   c                     | j                  dd|i      }|r|j                  dd      S | j                  dd|i      }|r)|j                  dd      }|r|j                  dd      S d S y )	Ninputr   valuer=   selectoptionT)selected)findrF   )re   r   elselopts        r   getHiddenFieldr      sm    	7VTN	+B	"&&"%%
))Hvtn
-C
hhx$h/'*swww#44r   c                 P    | j                  ||d|t        |      ddddddd	      S )
N!application/x-www-form-urlencodedr   r   same-originr   r?   zContent-TypeOriginRefererr   r   r   r   r   #   datarN   ra   )postrV   )r   urlr   refererorigins        r   postFormr      sA    66#D;vZ]^eZf$
VcS+ 	   r   c           	      H    t        | ||||||      j                         d   S )N)r   rd   referrerdynamicUrlsinlineHashes
emailValuecustomerName	metadata1)r	   generateMetadata)r   r   urlshashesrw   emailr   s          r   r   r      s.    Bv%d& &r   c                    g }t        j                  d| t         j                        D ]l  }t        j                  d      t        j                  d      t        j                  d      fD ])  }|j	                  d |j                  |      D               + n |j                          g }t        | d      j                  d      D ]v  }|j                  d      r|j                  s"|j                  j                         }|s?d	}|D ]  }d
|z  t        |      z   dz  } |dk\  r|dz  }|j                  |       x ||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              3   >   K   | ]  }|j                  d         yw)r   N)group).0r   s     r   	<genexpr>z!extractScripts.<locals>.<genexpr>   s     ;Nq
Ns   html.parserscriptsrcr      l    l        l        )rA   findall
IGNORECASEcompileextendfinditerreverser   find_allrF   stringstripordappend)htmlContentr   scr3   r   chchs           r   extractScriptsr      s   Djj>R]][**HI**LM**degA KK;AJJrN;;g \
 	LLNFK7@@Jvve}		!AB"q&3r7"2j!@Q!
?A$4Aa  K <r   c                 4   t        |j                  d      }t        |j                        \  }}t        t	        |j
                        t	        |      |xs ||xs ||||j                        }t        t        t        d      }|j                  |j                        }|j                  d      st        d|j                  d|             t        j                  d|
 dt!        |       d	t!        |d
          d       t#        | | dt%        |d      dt%        |d      t%        |d      t%        |d      t%        |d      t%        |d      xs dt%        |d      xs dt%        |d      xs |	||j                  |d
   |d   |dd|j
                  |      S )Nr   )r   r   zsi:md5rg   zCSE encrypt failed: rm   [z] md1=zc pwd=encryptedPasswordr   z/ap/registerappActionTokenREGISTERopenid.return_toprevRIDworkflowStateanti-csrftoken-a2zclaimCollectionLayoutTypeunifiedAuthClaimCollectionunifiedAuthTreatmentT2countryCodeencryptedPasswordCheckr=   )r   	appActionr   r   r   r   r   r   r   r   r   encryptedPwdencryptedPwdCheckr   encryptedPasswordExpected)r   rS   r   r   rV   r   r   r
   	CSE_JWK_N
CSE_KEY_IDencryptr&   rF   RuntimeErrorr   r   rC   r   r   )r   pageref
phoneShortuserr   flowBasedynUrls	dynHashes	ccDefaultlabelphpuphhmdcseencs                    r   submitRegisterr     s   	tyy-	0BTYY'GB	#dhh-S2=#BRTV^hosoxox	yB
Iz8
4C
++dmm
$C7781#''-2M1NOPPII%s2wivc#6I2J.K-LANOA(<0(-=>Z*2/AB~^`bkOl'O<Tbceg{T|%3B8S%T%tXt .r3I J Rd%b-8EITYY/0sKcGdb
3 xx
 
r   c                     | sy d| v r| S d|  S )Nr   r   r   )rc   s    r   rp   rp      s    UN59'%(99r   re   c                 @    t        t        j                  d|             S )Nz&src="https://[^"]+/challenge[^"]*\.js")boolrA   search)re   s    r   rX   rX      s    		CTJKKr   c                 V   |j                  d      }g }t               }	 | j                  j                  D ]  }t	        |dd      xs dj                  d      }||v s|j                  |      s9|j                  |f}||vsL|j                  |       |j                  |j                   d|j                           	 |sE| j                  j                         D cg c]"  }| d| j                  j                  |       $ }}dj                  |      S # t        $ r Y cw xY wc c}w )uE   Exporta cookies priorizando el dominio del país (ej. amazon.com.mx).rK   rI   Nr=   =z; )lstriprs   rr   jarrT   endswithr   addr   r   ro   keysrF   join)	rf   rI   dompartsseenr   cdkeyks	            r   export_session_cookiesr$     s   
--
CE5D	$$A!Xt,2::3?BbyBKK,vvrld?HHSMLLAFF81QWWI!67 % :A//:N:N:PQ:PQA3a++A./0:PQ99U	   Rs$   AD .D =D 'D&	D#"D#excc                 ^    t        |       j                         t        fddD              S )Nc              3   &   K   | ]  }|v  
 y wr   r   )r   r#  msgs     r   r   z+_is_transient_curl_error.<locals>.<genexpr>   s       "AqCx "s   )curltlssslzconnection resetz	timed outzconnection refusedzinvalid libraryopenssl)rV   rW   any)r%  r(  s    @r   _is_transient_curl_errorr.     s/    
c(..
C  "   r   c           
      ~   | }d}t        |      D ]  }		 |j                  ||      |fc S  |# t        $ r}
|
}|	|dz
  k\  st        |
      s t	        j
                  t              j                  d|	dz    d| d|
        t        j                  d|	dz   z         ||r|rt        |||      \  }}Y d}
~
d}
~
ww xY w)u6   GET con reintentos; recrea sesión si falla TLS/proxy.Nr`   r   HTTP retry r^   :    )rangerF   ro   r.  r   r   r   ru   timesleepr   )rf   r   ra   retriesrc   rv   rI   r   last_errattemptr~   _s               r   get_with_retryr:     s    AH>	=55g5.11 " N  		=H'A+%-Ea-Hx(00gk]!G9Bqc: JJqGaK() X&#Hfe<1		=s   .	B<A;B77B<c
           
         | }
d }d|t        |      dddddd}t        |      D ]  }	 |
j                  ||||      |
fc S  |# t        $ r}|}||d	z
  k\  st	        |      s t        j                  t              j                  d
|d	z    d| d|        t        j                  d|d	z   z         ||r|	rt        ||	|      \  }
}Y d }~d }~ww xY w)Nr   r   r   r   r   r?   r   r   r   r0  r^   r1  g      ?)rV   r3  r   ro   r.  r   r   r   ru   r4  r5  r   )rf   r   r   r   r   ra   r6  rc   rv   rI   r   r7  rN   r8  r~   r9  s                   r   post_with_retryr<    s    AH;vZ]^eZf$
VcSG
 >	=66#D'76KQNN " N  		=H'A+%-Ea-Hx(00gk]!G9Bqc: JJsgk*+ X&#Hfe<1		=s   A	CA;CCc                      t         fddD              xs t        t        j                  d             xr d vxr d j	                         vS )Nc              3   B   K   | ]  }|j                         v   y wr   rW   r   r#  ts     r   r   zisOtp.<locals>.<genexpr>!  s$       )1QWWY )   )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  rA   r  rW   rA  s   `r   isOtprE     sg      )   - ryy+
,	~ 3EA2M	~ Smtut{t{t}R}	~r   c                 >    d| v xr d| j                         v xs d| v S )NrC  aamationzAuthentication requiredr?  rD  s    r   	isCaptcharH  '  s)    "b
aggi(?(aC\`aCabr   c                 ,     t         fddD              S )Nc              3   B   K   | ]  }|j                         v   y wr   r?  r@  s     r   r   zisUnusual.<locals>.<genexpr>+  s     ~'}!qAGGI~'}rB  )zunusual activityzaren't able to createzactividad inusualzno podemos crear)r-  rD  s   `r   	isUnusualrK  *  s    ~'}~~~r   c                 >    d| v xr d| v xs d| j                         v S )Nr   r   registerr?  rD  s    r   	isRegFormrN  -  s&    q QjAo&Pqwwy9PQr   )NNN)r=   r=   )r   r2  NNN)<      NNN)5ossysr,   rA   r4  r*   r.   urllib.parser   fakerr   	curl_cffir   bs4r   r=   r   fwcimr	   r  r
   loggingr   r   r   r   r2   r+   r6   _LOCALErV   rH   rL   r  r[   r   r   r   r   r   r   r  rp   rX   r$  ro   r.  r:  r<  rE  rH  rK  rN  r   r   r   <module>rZ     s8   - - - -         8 8
 f	/
,U22  $

#Lc L3 L3 L>c >c >; ;)X"J&(,:
L L LC C ()  ( NO6:2~cRr   