From df44afeaff35079436b8be8082e42cff4d1f7ae3 Mon Sep 17 00:00:00 2001 From: Bram Date: Mon, 30 Mar 2026 10:06:11 +0200 Subject: [PATCH] try click endpoint --- .../install_playwright.cpython-313.pyc | Bin 0 -> 4351 bytes .../__pycache__/main.cpython-313.pyc | Bin 0 -> 55810 bytes .../__pycache__/monitor.cpython-313.pyc | Bin 0 -> 9117 bytes .../__pycache__/run.cpython-313.pyc | Bin 0 -> 273 bytes .../test_cloudflare_bypass.cpython-313.pyc | Bin 0 -> 6904 bytes .../__pycache__/test_database.cpython-313.pyc | Bin 0 -> 5700 bytes .../test_postgres_setup.cpython-313.pyc | Bin 0 -> 4335 bytes .../app/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 114 bytes .../app/__pycache__/config.cpython-313.pyc | Bin 0 -> 1443 bytes .../app/__pycache__/database.cpython-313.pyc | Bin 0 -> 16643 bytes .../app/__pycache__/main.cpython-313.pyc | Bin 0 -> 2087 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 121 bytes .../__pycache__/browser.cpython-313.pyc | Bin 6827 -> 9021 bytes .../routes/__pycache__/cache.cpython-313.pyc | Bin 0 -> 1272 bytes .../routes/__pycache__/health.cpython-313.pyc | Bin 0 -> 411 bytes Dockers/puppeteer-api/app/routes/browser.py | 38 ++++++++++++ .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 123 bytes .../__pycache__/browser.cpython-313.pyc | Bin 28066 -> 32261 bytes .../__pycache__/cache.cpython-313.pyc | Bin 0 -> 2645 bytes Dockers/puppeteer-api/app/services/browser.py | 56 ++++++++++++++++++ .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 120 bytes .../__pycache__/browser_utils.cpython-313.pyc | Bin 0 -> 12040 bytes .../cloudflare_bypass.cpython-313.pyc | Bin 0 -> 16717 bytes .../__pycache__/http_utils.cpython-313.pyc | Bin 0 -> 1372 bytes 24 files changed, 94 insertions(+) create mode 100644 Dockers/puppeteer-api/__pycache__/install_playwright.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/__pycache__/main.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/__pycache__/monitor.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/__pycache__/run.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/__pycache__/test_cloudflare_bypass.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/__pycache__/test_database.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/__pycache__/test_postgres_setup.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/__pycache__/__init__.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/__pycache__/config.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/__pycache__/database.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/__pycache__/main.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/routes/__pycache__/__init__.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/routes/__pycache__/cache.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/routes/__pycache__/health.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/services/__pycache__/__init__.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/services/__pycache__/cache.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/utils/__pycache__/__init__.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/utils/__pycache__/browser_utils.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/utils/__pycache__/cloudflare_bypass.cpython-313.pyc create mode 100644 Dockers/puppeteer-api/app/utils/__pycache__/http_utils.cpython-313.pyc diff --git a/Dockers/puppeteer-api/__pycache__/install_playwright.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/install_playwright.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ab8dfb607a0cbc1663e3ae9ce7832fc325512ad GIT binary patch literal 4351 zcmb7HO>7&-6&`YzBDJI_>(Ba&<&lzFVr)^8WxEzz*>(JH$Fi!GVi$5jua--4D{_~e z-K|6h1>7J(WVEQ&B57SWgW&9a`tgaO2 zE-RWYXR#38{WHEO;{BscZPgw$Tb(=Q?wO)EPam2=JnYc=W5)uD--8#h@anvH8K&2ZSm)x@ z+8`1}5K1y|LxXjd0sqcwi+wu!R_y>*_q}C`Vtegbq^ycYoyJ$={s3|8hC{jY{ay zMq}&On?X?iN^1i%e$hXM{@i-z6!TF-|Cur7qp<+=MHr|)LFieL{ttL>kMvq(cp}LY zFSB%>^~_eIo@b6bcVWO8OXU&TQuwBX>Go$P1~0`TU;2Y0;n@S0l>@wVd0Tg9_{LÏu5>>nqKNSt17yz7!s7E;(|~-jR%TD6R`v~eZ^AywylVQB0@ouQt{7d zhA8bX$OYFwxR%&UZO$yP%HyC?cTJ@_OUx2AFB|z%w`a~-M~LT$x}Zq}>XWL03j(i# zor@*UQZCM5N-Ai$3fAKR(~6od`jUef;im7u7ycVen=8gkzk-5yUBNSRhN2ro=cGAVP!dp)Q!0k~J(!Vn7ak85aZa97 zG;Nf&f<8YuN90sSIvO7y9Hyca$seWd;`|&vRaLR1i_oVI(WMbjQ3NrR8dI~(pSt{WAG}d9wfmnhP4;v6K$a>c9dZrA-K!gjn9@TXs0FPr~L6CJ^ zh`Waz&k2SiW(Ts803=G&#;1uP#jFMBL=mDI_)&GD0~A-J1t1*O*g#FY01m9GI>VMK z9q{NmMu0G$QFV2oKdb8nEip7CEee!;#o=iBYp}Yk1HY@|u+&c#=B80!-l7ZNwk< z#ki7xP@Il2gi;DZ84sas)u0vU8Boiehz`%h69z3E5OqJl>(y~?j(xpoFz;rqy`=~@ zLC+5^FF3e#dL)i#3MoOCa8We~q`4m&GLdKo)8ablL9UY(F=wPC++WKx6OvAb!F^@g+d`Gi?-=BgcG<>)U)uBL|y5L zx5!0gmNx3m=!cZ*NMqMY9f?mnsrW&56B8-_JN$b02G_@7}Kw6CaVZ} z$qX1)6NFi`L+W9eP`+$((xN09x-gfMEP4(f2=MKo!$%vToQ(keLcrHUaGnKK(Ihi$ z8EbQPLa7X)tfhH*Z_7u@aFaBbtuyE&glJy zweX>p@SzWbe_@_}e{J~c%J9|7B)>M9T$xN(#Pph&UlH@GlX+m=<>+gb(2b3jj&kSd zYRj>u(0aJ#-l@B%R>R%*wbgLnMx?3Se7F)hvfk24;oHmYL*jFnP{UICUjA-=E!w*h?Olz&SP8xKoU`Cwsjz3M zzlJJo7qn&WYK48(>YS^v=dI2}g}wf-aOBJ9Z78ze{bcdO%HXekM;?FoPd7if`S?mX z`prt{OBal#!E8ks*-L;;)Uv zYm@Q$e4n#^AG;MozUEI5_X(>1g5`W|Uv!-EHEe#zkJ!jkX_e_*XM=BFdgIdF>7Ty# PPquZFL2MU^1Hyj+>c&Jj literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/__pycache__/main.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f291abdaa699d737be5e650d2e43d1507b4e4e5 GIT binary patch literal 55810 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 z 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 T68RJDZ^`2OYDC(279{^KF;R6U literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/__pycache__/run.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/run.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f3ab83510943fef0df76ee57de7537372db5c44 GIT binary patch literal 273 zcmey&%ge<81dl#zWTXP=#~=<2ut6E0?SPD_48aV+jNS}I3^9zsOjZ#L42i-F3^5Er zEHLE=T8SZ;IhZAwHJHtkS%D#)F`ZG9{Uu1+?-oaVd~RZ9UVMBNPhvrV9*AuPWK^*m z=z(FTgFFL+CetmJjQrw~TPy|nMJ1Zdx7bU|GL!R*@<7`25_41I<8Lt+mFBHv_zW`j z7Kffbkf&Erd5gm)H$SB`C)KWq2PnY^#Ko#W;sY}yBjarbz6Z?Q9aWc^C2z2Bw|h5v XPvBb+xgq2-i`55a1{SFzP)Gm(T)RMs literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/__pycache__/test_cloudflare_bypass.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/test_cloudflare_bypass.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60a71b1ce3a0f8ce6ef2e92a2e0324f03fcc837c GIT binary patch literal 6904 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%0A-*f?=muhSFmkt=PW3NV zd+xabk<1J(wDc^xd#~6qmecl`xYF+b;FQwvg=|gWZmoOz@M3M-y}BmF6}VF;+()7> zTX*<>|Lv*Pl~KO)y61YG;_S~lj(l2AYQ6*!eYhB_A)^0t_3*z#MBj`Ny|&N|97^@@ zV-ej|i0JKVL~os8rXiy5UE=pG@cYz=-u`F#zrp7h8vD01f4`-lkY6%~dkw#0fqH+d ze+PTR#rSpnjjb%wJGS}F`kQ9P&+#`chX}mfvM_!Ff6KZN=>`ih-EuR2-f+vqA-&52 zdTwBEmovEakjHvsCl*<>D$EI?_zJ8ZT%nVi;D$14EB}^ z9vf;j{{w8gd^9hgUw=6=7vqA!sL{j=(WDg11nre$xm9ziq|uEh&x+!LE83!d`UHd^ zaA-sT52O_ZqDvvZ#h;|ZfI8xgW>%|U5y7Z(=`?oo#SvhZWjnRezI0hR%m5C7gAof{ zQ<}9%2Bb^z{0V&JQA#MGV(ikjC0tFLAs)8EQ?Fi{RAn|E4@Ki@idedfet>pn`h#*P z0ttU|GBplaw0b~2mOnviMY{@lU{9WcL=Y&I9Wue5%!~eWp@}439XwGJ=A*vWRyg@X zvGD{P${lTOZFDk`mRewp7SK$QMFt)*uXGoLzz4XXIi~dig2o5v&GdGtmfv3EazeeZ zp@MoVpXuuU9AzleZT=kM-DwOs%Wq%$dVWe6&SP+GG1}zjCHQtA+Q^fTdWWRQ%M!BY zIPqLG1zEG4f`2KfxvLr?-0X@lB%>D~#^i$wHvvm5bwJZ;c;tVA3S-G92Etq3*n6qt zV#jN*UOu~Mticn}_Qfp!yh*g~g_ zGtGR4-G`$^?&jkLL2Txc@Qed z3>oGjr(?KBJYm*-NNgVx%ZJ4LFQnmPZWq(?@rz6Y)Bf=@%x1>5+(tO->zPG%%U#a$ Ytz#FCy~%ywaEGg2W(nt%o&jzD51aA&-v9sr literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/__pycache__/test_database.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/test_database.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4898e2103123a0f62b44076133fe22f43cb9f69f GIT binary patch literal 5700 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 Ib~CR300tfmbpQYW literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/__pycache__/test_postgres_setup.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/test_postgres_setup.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea29050d3ab4f30030b2d5b995d7bba7a007c19d GIT binary patch literal 4335 zcmb6cZEO_Bb#`y>ZtvUXY%n;s$0i0J7&{mYslgCF?Lq*@>mx`Yt=4yY=Pl>G>+BxI z_ls1OFltm0r7b8*R6vm+|NO62RVh_}H0iG%x%i)N0r&}$5J3_r@uxY$v6UzMC4Smx zvpef_z=3T@;x2J(@`h{UxVxwBT3kTh$wks4qOUKzOf4k zDIExb*BfmO&f14A1^Uov9bxOmD9dO0guiqsIHMXSHc~_@nAptYD=N`43wSDTm|3Dq zuf2-XimA*hhKf@}RZK0fV?|G6Lp6(q;1^WyS<9mo3Mt1XLNt9I_^qB2Xp%41!$FX0 z$Aw`e@vm_@N}@PA&l&tMGWa-}>_bTBF4n_FXc{zpb@ZWRL(f2+sDQ*7jDRx5pLr3X z5W-03buP&_IFiWiiANHq{a@7#^1SU~6zyri*e&U`IhwG(HL;DYY~mHy0eH@UZ)I@Ki_-VU!Fx5$WM%SnBbD zM-pbb_crP7b#%Bi_kqk-Ci5bl*WI`N2H&=?^ELUp-LaDmx-1R2@Ck#*a8GqEgL=_L zC_A;`N6H}F+lWhQM>5jv6GXrBbVQFPqtjisoU_^`3Zot*?bIVjB9Je(X290Crw3)Y z#9(PBt5^SDc`7Bw$Hy@h(Dbakq#d_QnnbG@2Cjr)MW)V4GZWJ%BzY15E7bUV{HTkT zluk@rtqt1L5lMRe-1PC{I7IT~ojYzTCabKMwL(En<6U@OGYsm7s$bDaUY}QW6JJq? zrp)G4V+@!0L0sAn4qmu8s)mRFOVSF!7(kBV6%n9BKrf21OMOU&avHY5@nR0rz z6l-MGTqvjzRIB4OrrwQVLJwi7-G#TE0~&odnq;VFfTwl3*bmc_ci+Yh8`P?%&nBpdvN0?en)6HTgi#yyjqMAfgDLq5- z^EHkpmy6pN`z?G@(Q-94whViKU2+M|6^?9}ifLFrx)cq|Ur$3_-P`yW4IeWmY%6R| zR;d*`8LjP_<*jLr*gGRrJY}58n@SE&FpUPztQ9dSLarl<^jbf8*Bu1p-Hw(z+Q`Zp z+h1!bYDb-(HZ|QlQ-o%KX>{?k&ZEYbVaXc9XA?2YTOgWlT6`X|0aoFbS;BYnnr?-m zIT^AeA+(7jv^%u?aDZuCg!XC#syVVYP*yl`S2Q?FLu?;O3nc_jTurG3+Wc4nlPD>5 zR!Lp90?eeWUQL1h2vNUV)QFmv;pQ5a2WBf=zw->`n08qd>5-F*BxeN~MDj&b1sfDg zeYQf(i`uDWzK}R|h*L>7tVRqb+&rv~p>btT0WC0N3&INj*_DLtK!QHNL0lg4A@x}2N|%dDh@GVcU2r& zjC3KwJME^})nleMx?} z?L@i%WO>6xH9WZviKzv9^D&1c2{f#!GMve%v#$UHG{Vrr*49 zY+zy#{nmS=9hQ$eLv$VtPWE{|+SfPP<@vbF3vg54Px~tRTm30a>-GJv9>LvTQ#m&5 zPC$3}S01MaNuowK*4%>$4o}wWvf}E@v;Krw>Y6U<^p$l#)=pI^b-Rkq@#aop2JU5P z1p0+9p3150>u*j?U1nJW%^59QB+kd6D`B*Hs$}R3`o)*v3H>5v z6(+%v4FDSyj|tsCOPE(Qoj}`&rYMDWQ1$Y&qblrtECdz@esJz-w6_x7dTj#A(&BJc z*z&nQ%I;vMDrT2sE$r;mQUmZRC_t7dLtCQhvYZH8epycEQ?g9xLv4AC1;Y{wiaBTb zG#wl@$!3c8r#067P|*y$zQ9jwBJ+&mXlEqLmY`nM%nuORMQJPm@!)(uUCgP6$jgAE zkr|g^TJdlk_ocvd!m5b4;Abef;zOKpU3^2l9(yBple;-`YyVsOZykK=;2r+H|E~Xj z>~3sHtl)3`Vzd%JQbk9f2}e1u{n;cR;aXR^kq}-iRXm%Q1^@NQ?@!*C`QiCTLfeW5 J30s&m{{u9Z3*Z0% literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/app/__pycache__/__init__.cpython-313.pyc b/Dockers/puppeteer-api/app/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0e2ba5c4be49c579e64de220984184600b1e204 GIT binary patch literal 114 zcmey&%ge<81dl#zWcUH;#~=<2FhUuhS%8eG4CxG-jD9N_ikN`B&mgH=f_nOi1qJ%? q@tJv6vu}j=I8PoTcJc~<+P27B7PV{l)8$8@y4tSyL4x%gNw8RvvF3&EE;f9 zxRhRfu@$L`l}n;tn%;Wsv8SGT*k}(;CQ>gw_2$a|KxbuGMUm)?^fd3i&-=dlq1{WL z&jZM~{oU`%9}58dZ8)>xm@Y0qu>$Y|fB;%{00K=Q5dY(`44^e{xr!od)4DPRIxYa3 zHj=f?va+RVU!JdGhYR_s{;UEm%_x+E)`2((9;C2Q(+r*-R?4PLn`kZJqwM zu$H8Y{eD;8mD@YYFrClcN#zRk%1&9VR&LW>sV-Eouf{`hTVNnLE)+j- zYrG(0dwwmqioGVYwfO;2CkMwNGiT`U^1{}bN_X1n{nq|tIn`+=qu8nru;V};lIuq{ z@-*1k1wxVM?q}}vv>v=Q@x2X(ue{d3EB5O=^P*JhG<)0x?+ zv?8mi^5~4hw3Q~)Ry*lKEtOVVx~jC9%qt)I;d*cu_72rXYSeDDUzjA-j55+{|NnD+ zudj_E>2yByhMaruJ?H$-
TKmEvJF;Z|vpO2sE*iBJ?#0T+Gr!tSOLFP@0p%}#> ziWTk(RzaSXtdiVStP1YRL+U;?tERDz>X4>S%WC^{tgcVb>iZ0=q0h(~`%J8<&&-

YB}Cv>Pba#^@l;XY`QT83Uw_afQ?P0Ba36 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 literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/app/routes/__pycache__/browser.cpython-313.pyc b/Dockers/puppeteer-api/app/routes/__pycache__/browser.cpython-313.pyc index 22600c979c464b156433d74c54db8db4f124c7ff..973ec9eb5f37ccfc19e4fbec44e2632d8bc24791 100644 GIT binary patch delta 3481 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 Xo;7WVUx|$_r#7`KZFXY0g|GeqNemPz diff --git a/Dockers/puppeteer-api/app/routes/__pycache__/cache.cpython-313.pyc b/Dockers/puppeteer-api/app/routes/__pycache__/cache.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f33fef7eae4fde555be7eac9474d27b0d8a40c76 GIT binary patch literal 1272 zcmcgq%}*0S6rb5`x4SJZ9|D0Ebc04|V%kdy@dFcMKxh*rENBc(nsqyr#o9Kr3j)yu z^`HqS4<;Tp@gO%7Fa8-NoSaC|=mk%Z8WTMEX0`=2e%zd-ukXEi`{wt4zgG)~g9wgu zb!ASM5&Fo3#_`vk+GlW{AOjgVgVLDdv_z$}Ol6(tq>L}^r+(qf86_Q{0pa^HYFeXO zI!J>$%HlpWP;W;=+0bNnrNrnI|-knR-QJ z%p&*!sLy4Fug4`8vWmo{Im@)>2x~47*K>1@Yr4)#Q&L9u1$$9km-5THE);>*?A0zzBP}P7R{oa*I_^%V6MY}e3AtxXO;7W zDS6_Wb}=r~0K83o+^AsIG3D#!@Tqjxkw}`AN|JI$9gl%TWtp}9Kvhm$(j!pMzjsc7 z*+Hx5tBRUBo@y_yZFZf07m2-;tEu6Q$VgQk`4sA08>;%c_G|pr`zQPH0lR|h|ITRp zW#ZOJ0XQ1wCIaRsqBNdu1>?~~+rR}<_~v-)QYWPo@}i8dz`sa|ZiafQ zzMg&B4#n{n7ML{wO~s~sJv@QVj>n?*f;tDIjbk_%La9Nz^8mKE*F7~^e}+CZr- z6x%{ax6!!|TH9J|Re6sC52N>@kH$A~?Cs#toBZoLdq~0E&z4@v&+mTWZcRo~&#naC XZVQss-<9_smiLPCJt*&`$KdVnfYTPj literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/app/routes/__pycache__/health.cpython-313.pyc b/Dockers/puppeteer-api/app/routes/__pycache__/health.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..746b158a4024570e1b292d373e6927a3f5948890 GIT binary patch literal 411 zcmey&%ge<81j1L-GireJV-N=hn4yf%K0wA)hG2$ZMsEf$#v(=qh8RXA22-eX5mO9P z5IdBELwd7!+#(i4V+-jEr{~WFK-0bxSv}Jz!*Smu{5q2)@iH_>qZ`QRXu<1CtP#1vU!+ DHs?~+ literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/app/routes/browser.py b/Dockers/puppeteer-api/app/routes/browser.py index 987b1f6..98611a9 100644 --- a/Dockers/puppeteer-api/app/routes/browser.py +++ b/Dockers/puppeteer-api/app/routes/browser.py @@ -3,9 +3,11 @@ from typing import Optional from urllib.parse import unquote from app.config import API_KEY from app.database import get_cached_data, save_to_cache +from pydantic import BaseModel from app.services.browser import ( visit_url_service, screenshot_url_service, + click_selector_service, extract_seo_service, extract_meta_tags_service, capture_outgoing_calls_service, @@ -14,6 +16,12 @@ from app.services.browser import ( router = APIRouter() +class ClickRequest(BaseModel): + url: str + selector: str + # Default behavior: return screenshot after clicking. + returnType: Optional[str] = "screenshot" + @router.get("/") async def visit_url(url: str, skipCache: bool = False, x_api_key: Optional[str] = Header(None)): # Validate API key @@ -66,6 +74,36 @@ async def screenshot_url(url: str, fullPage: bool = True, x_api_key: Optional[st print(f"Error taking screenshot for URL {decoded_url}: {e}") raise HTTPException(status_code=500, detail=str(e)) +@router.post("/click") +async def click_selector(payload: ClickRequest, x_api_key: Optional[str] = Header(None)): + if not x_api_key or x_api_key != API_KEY: + raise HTTPException(status_code=401, detail="Invalid API key") + + decoded_url = unquote(payload.url) + return_type = (payload.returnType or "screenshot").lower() + if return_type not in ("screenshot", "html"): + raise HTTPException(status_code=400, detail="Invalid returnType. Use 'screenshot' or 'html'.") + + try: + result = await click_selector_service(decoded_url, payload.selector, return_type) + + if isinstance(result, dict) and result.get("status") == "error": + raise HTTPException(status_code=500, detail=result.get("error", "Click failed")) + + if return_type == "html": + if not isinstance(result, str): + raise HTTPException(status_code=500, detail="Unexpected HTML response") + return Response(content=result, media_type="text/html; charset=utf-8") + + if not isinstance(result, (bytes, bytearray)): + raise HTTPException(status_code=500, detail="Unexpected screenshot response") + return Response(content=result, media_type="image/png") + except HTTPException: + raise + except Exception as e: + print(f"Error clicking selector on URL {decoded_url}: {e}") + raise HTTPException(status_code=500, detail=str(e)) + @router.get("/seo") async def extract_seo(url: str, skipCache: bool = False, x_api_key: Optional[str] = Header(None)): """Extract SEO information from a website""" diff --git a/Dockers/puppeteer-api/app/services/__pycache__/__init__.cpython-313.pyc b/Dockers/puppeteer-api/app/services/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9172e4e1354bbab85bf2536a483d0c0d68ccc24 GIT binary patch literal 123 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 BLU;fG delta 2339 zcmZ8iYfKbZ6rQ^~J1omC@@5xUSfD%>!OEkOfUvM2iYTR7S|3=}1qN8Vuy|)sL@C=C zP17HJc#@_zjj=XOr9YbJrcJ6w1)G|trZK^!?evwVOYkFTw!~J+VBue{OIvkQb zh#yP2EHkP}9~d@d(X0`{ZQv!u-3SV4*z4k@_|TFM1eKubALk*zBJ%^mewmj?FUNZs z`zXp1GMUsZ`r>^S=(1*aOq+$yAl^Q_8}Kg1J1Jl2(WAx9gg7C9Zy7c8*l0wTFX3rJ zqEKykg2l!z!DsC@_N;+(b*an-UswxSBHXo>VKh!#X+rQ@6KXP!jSjhir)+T8an+2G zQ;?bwHF7ez&D;UADdliKCD)sW2Cj$cqA3&4$A^}r^mADrRffZ=zweMLE4-Ne^dqQ2 zrr>J?m&+B2@KV^3+HHM+;|I5ei14Q&8Q#e8fhElapR^^zt~6(cL$K{&Ut62+NP?}G z5w;@&q}5Hoh3k&876&_)<}DIVGOt5?GZWc4=FJw*6Pt}^UZ*%~(Rn`e=83ZfcCyzo zZ@xHNPxiSK<}DQGQcc9|wB4M85zp4qsbijwxC7b?bu6-YTQZDukLR=`8?PlWS(*Q5~795FXMw{4B=bv=*GMKV5Ot zvi_D>`Hz@l+Q$AWg5|@?nkh+vFMM4Km6($SC#=9HYF4*FJSgVJ%P}Q5! zWkpq|$`dLN^s89Y;l;XcN3U*}D61DMkm*6xto_f#QlX}@Dk~NPPVj96+X*@eo`gtc zY4c)SyakQ!<>KQUtBwwm9~iM8ZOd5ayzriR0YUj&$IIMcWjjWbL$g~A7Aj``S)W6h$d0X5j~r=wW8 z6leJ!f@cx_5a3MXdR7bbjRgth$NLESPk7czF$OiBB1xYq0l%k^mBLZah~awy?s`5< z50Y~{0euB{0zn2`YMNR{D>}I!@sXmqv4DzoFsd23yniVYTCxX*ns>5fxY|5`Qi{BV ztRLFFWvmZWZ>VZNy38zYBMpQ{0>M$Ppmo(Qw3UjG4=F9jW19QmR7*DQcA=#?J3{k% zB+nyrGmT9s^kJel$Y>3)N|0`CekCpem0je3-bXgt@92LoyzLBCDE784Cqf?!q~DVyqoTkjE{FRo!An+d>r7>V2I%+4ktg&LWn(ykFi!uSMm^H3vjG9dUdH`4$GRR_DUT zE+?yq?(WJ-XH{@e*5WkNV3_yI@XX+-G-;@FaXWlIn4O@j)bm;kcLvuoCpd@B+81SG zy43JkEIVdi3*QYD*Xn;4%UCFI=pYXc4XaBrD9hwyJ)s)?$E!m)S~vV-GE0G+$)5V_ zG^PKsE|7dN6jW4xiHsKsP7n+eTqd|eK$7sUcOA}8wwCA;Z1{h}?hcRo)!>M%7tAUF z;5_V;l|BlIQ=7_Lc}O((d uPMdOSAby;HLe4oX3D#^||*xefVa;i)u@BabG-wX)= diff --git a/Dockers/puppeteer-api/app/services/__pycache__/cache.cpython-313.pyc b/Dockers/puppeteer-api/app/services/__pycache__/cache.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5429473442a816e7ace8e82566cbc7da460a8004 GIT binary patch literal 2645 zcmcgu-EY%Y6u(YvCykTRrY&KGt`;h73@qWH-3CL5(kAqSCM?E$Rmd~0OCu$AcI|95 zn$#d6v5$udX$bZqjYoLe>t6RCBs5YZk8McX%idt!%ieabW2YISRi{b2YVSSwoa1xP zIrrS($z~)HLNLsWm6dA&gnlI(Z}?nda~z0!NJJtvk1$z%^VA%LDW1^&dEcBL`{!s( z!=4^Qm=PJ6*&CF={!UC}1j-IBDVApCi<;oGLrd4?qM|D|G;BwwCZ}dna_aK=+1wR* zCM)Gcm3-q3KM>@9^Lv=?p+%36a-Mf>4nhafguBy`gmO%W$R*oyN}_TQ@5@7^Ca4yV zCl#;b}78%T?CT`{#v?{w;1 z>OzW7=dueenH@08s;Zf0WpK*TRf!30iFet{ajyd6s zbm&gzR;JcB+Mvgpbnwpnt@+yvgqXWEcl%s(?{MwtOr4vp(X*Ri3H_rI$Xz&6K{(;-N|gJOkRGq3MSYt1nh`qSV}<# z$i;chw0m4azP>6uF52B#Q-Rsm2pfeZaK_oM+F@P$aBCNJ&`#EFmhyO2UNHbp?T829 zvb9*k(vxO`+QXVoW-$gQ_@8gu!LaQdbOJb19`zu>E=6vS|`6CKzW&ma$Q6 z2XA-fO=H=>Ma9D8nPUPtb^zL_b7&avAxr`-xSvRvR&0!Fl))_P>>zkI)V5i?mniqR z5x3bk=Wmf}`b~1sF0GD`fYS3PH=n&6Y#Bi-1 zk!;Y%n*D?Kvv;%W{f8bZ_5OHup+lZ((CKD!;=8rSYmMaTMr86y^7NM(LV%(dl}0 zx)Dv+-dn29|JU!Id2JC4^&NONbhycnHeWy5JTL}-PY;ei9U9vhO4f&xFZKkZp%)An zW}hRDVgK43L)~X6lZABukmydwSRsIiVbiLtF!b|;SG2AAB-P~faOavHBTN9db&WHa^HWN5QtgUZf$Bi!6oVKanHd=wiV!Z literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/app/utils/__pycache__/browser_utils.cpython-313.pyc b/Dockers/puppeteer-api/app/utils/__pycache__/browser_utils.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e26f6e0657acf0e9782697804e5528858d4d4b70 GIT binary patch literal 12040 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 literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/app/utils/__pycache__/cloudflare_bypass.cpython-313.pyc b/Dockers/puppeteer-api/app/utils/__pycache__/cloudflare_bypass.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6424e5e2a1cd50ce9231db5628921f43a8e7ba9d GIT binary patch literal 16717 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 literal 0 HcmV?d00001 diff --git a/Dockers/puppeteer-api/app/utils/__pycache__/http_utils.cpython-313.pyc b/Dockers/puppeteer-api/app/utils/__pycache__/http_utils.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9c24f89e454383a39c4afe909ce757e723e045a GIT binary patch literal 1372 zcmb7E&2Jk;6rb7IFWc+5?IvkSEwT-zs+HQQgrg|9fU;JJk`i0;#-dUpMOM820C#Q8 zj8W;Sf=iBYsAxc_<^~54M?m6W_a8_BHDv_?iBoQl0*Zt<@WyLXz9huhv-5ku`MtMq z<~{9EG#W-Qq@AVOvl2o-31c+WAvn4M;0|(-gRh}gO!2BjB}>@SHL@yG88F#Y9C=gS zR5rD=q<}sxJIWM#MW%XHO=t%qR6_Ej*+$*mFmqJ=Pj$`m93!Q7O%P1cGKg~Gy|IP5^po0%5M1JNjLyBjl!F})BvFI zppkO7!bRrNOmt)|CZUmK>xgwz@g|B2LGsnwcm^Lm5LiDPUHV5;@HAF7C>Zb2i{ac~ehuns&9 z&~5ayj$-l7%!9F~Z!dob=;i%b@~c?#)6+j1XTF)5?Gwoi?`VA$jh}rd^LFMgdn>bV zrXQH;&-6#}^Y_+v*WSzTPtNWvKQgE8<#+RY=IpV8#^*t_XQq!s=tK%4ejQ65>cD|L+xSb)NV_Va|Ab`Fc zw_{58B(_6(_tXi2XAGdbDQrjd?wl;}GY0r|U%+-$?I9I#Ps70XLKyVD$N)#N;A5(N zA=I0|_L;HXq#^K(CX|VY*iB=5LGH~DB4pI;DeXSSS=qQR83K=KpvfgdzBX*5pv>a3 z{V-G}1vRVGtHZi8PN8qwt%mE9y2l4~`3N0>7*SKW=vQtu%k75yJdJ}XzANkkJo*G< k`~$lDJ-XPJBlyx?vyWiuOmx_X+0M-mrhgG8Jqyy`0c~O|UH||9 literal 0 HcmV?d00001