o
    Nj3                  	   @   sr   d dl Z d dlZd dlZd dlZd dlZeddedd edd edd edd d ZG d	d
 d
Z	dS )    N_Log c                 C      t t| S N)_logging	getLogger__name__errormr   r   +/Users/user/Downloads/amz/amazon/captcha.py<lambda>       r   c                 C   s   t t|  d| S )Nz: )r   r   r   debug)kvr   r   r   r      s    c                 C   r   r   )r   r   r   infor
   r   r   r   r      r   )r	   detailsuccessr   c                   @   s*   e Zd ZdZddddZed	ddZdS )
Captchaz7AWS WAF aamation captcha solver for curl_cffi sessions.enes)usflexcaflexmxflexr   c           %      C   sb  |t _ddlm} ||d}|dddi}|r|ddnd	}	td
|}
|
r,|
d nd	}
dd }||dd}||dd}||dd}||dd}|rR|dd}|
rV|sht	
dt|
 dt| d d	S t	d| tj|
dd|dddd	d	dd	ddd}| j| dd|id d!d"d#d$d%d&d'}t|jd(d)}|d*}||jd+d}||jd,d}||jd-d}|r||d.d/nd	}|r|st	
d0 d	S | jd.| d1d2|d.dd3|d4|d5d&d6}| }|d7 d8 }t|d7 d9 }|d:dd;dd<dddd=d> }t	d?| d@t| dA t dBdC| |dD}|dEs7t	
dF d	S t	dG|dE   | jd.| dH|dI |dJ dK |dJ dL dM|dN |dE dOtdPdQid3dRd&dS}| }|dTs|t	
dU d	S t	dV |dW }| j| dX| ||tjdd| ddYdddZd d!d"d#d$d%d&d'} t| jd(d)}!|!d[}"|"st	
d\ d	S t	d] i d|	d^|"d_d`daddb|dcddde|pddfdgdh|didjdkdldmdgdn|dodpdqtj|drds|}#| j| dt|#du|t|dvdwd$dxd4dyd&dzd{}$t	d||$j  t	d}t|$jd	d~  |$S )u   
        Full aamation captcha flow: widget → problem → solve → voucher → cvf verify.
        Returns cvf_verify response or None on failure.
        r   )BeautifulSoupzhtml.parserinputnamezanti-csrftoken-a2zvalue Nz "data-context":\s*\'({[^\']*})\'c                 S   s>   z|  |t| }| ||  || W S  ty   Y d S w r   )indexlen
ValueError)datafirstlastsr   r   r   _between    s   zCaptcha.solve.<locals>._betweenz"data-external-id": ""z1<input type="hidden" name="clientContext" value="z/<input type="hidden" name="verifyToken" value="z4<input type="hidden" name="openid.return_to" value="z&amp;&zMissing captcha data (context=z	, ext_id=)zExternal IDZ)WAF_ADVERSARIAL_SYNTHETIC_GRID_V2_LEVEL_1zen-USF)Z
clientDatachallengeTypelocaleZ
externalIdZenableHeaderFooterZenableBypassMechanismZenableModalViewZeventTriggerZaaExternalTokenZforceJsFlushZaamationToken),:)
separatorsz/aaut/verify/cvfoptionsz*/*zapplication/jsonemptycorszsame-origin)AcceptContent-TypeSec-Fetch-DestSec-Fetch-ModeSec-Fetch-Site<   )paramsheaderstimeoutzamz-aamation-respz{}ZclientSideContextz"problem":"z"id":"z<script src="zhttps://z/ait/zMissing captcha widget paramsz/ait/ait/ait/problemvisualzen-us1)kinddomainr,   problemZnum_solutions_requiredid)r9   r;   Zassetstargetimages[]'_ zCaptcha target: z (z images)ZAwsWafClassificationz	aws:grid:)typequestionrC   ZobjectszCapSolver returned no objectszCaptcha solved: z/ait/ait/ait/verifyhmac_tagstateivpayload)rM   rN   keyZsolve_time_millisi  i@  )rK   rL   rO   Zclient_solutionmetricsr,   )jsonr;   r   zCaptcha verification failedzCaptcha verifiedZcaptcha_voucherz/aaut/verify/cvf/)r+   r#   )contextr0   responseZsessionTokenz'No session token after voucher exchangezWAF session token obtainedZcvf_aamation_response_tokenZcvf_captcha_captcha_actionZverifyAamationChallengeZcvf_aamation_error_codeZclientContextzopenid.pape.max_auth_ageZ900zopenid.return_tozopenid.identityz2http://specs.openid.net/auth/2.0/identifier_selectzopenid.assoc_handlezopenid.modeZcheckid_setupzopenid.ns.papez+http://specs.openid.net/extensions/pape/1.0zopenid.claimed_idZpageIdz	openid.nsz http://specs.openid.net/auth/2.0languager   ZverifyTokenz/ap/cvf/verifyz!application/x-www-form-urlencodeddocumentnavigatez?1)r4   OriginRefererr5   r6   r7   zSec-Fetch-UserzUpgrade-Insecure-RequestsT)r#   r:   r;   allow_redirectszCVF verify: zCVF URLP   )	capsolverapi_keybs4r   findgetrefindallreplacer   r	   boolr   rQ   dumpsloadsr:   textstripr   r!   solver   postrandomrandintr   HANDLE_LANGstrstatus_codeurl)%sessionZ	page_textZpage_urlZbase_domainZcapsolver_api_keyZassoc_handler   htmlZcsrf_elZcsrfZdata_contextr'   ext_idZ
client_ctxZverify_tokenZ	return_tor0   wamzZclient_side_ctxr@   Zcap_idZcap_urlZ
cap_domainprobZpjrB   rC   solZvrZvjZvoucherZvr2Zamz2Z
sess_tokenZcvf_dataZcvfr   r   r   rh      s0  
 	

0







	
zCaptcha.solveN)r   )r   
__module____qualname____doc__rl   staticmethodrh   r   r   r   r   r   	   s    r   )
rQ   rj   r`   r[   loggingr   rI   rz   r   r   r   r   r   r   <module>   s    8