From a401041df3eec9e9501e9c622700fa357c1d3ebf Mon Sep 17 00:00:00 2001 From: RochoElLocho Date: Thu, 23 Nov 2023 16:19:28 +0100 Subject: [PATCH] optimierungen --- __pycache__/boettcher.cpython-311.pyc | Bin 4367 -> 0 bytes __pycache__/brewes.cpython-311.pyc | Bin 2674 -> 0 bytes __pycache__/bueroshop.cpython-311.pyc | Bin 2689 -> 0 bytes __pycache__/conrad.cpython-311.pyc | Bin 2635 -> 0 bytes __pycache__/contorion.cpython-311.pyc | Bin 2651 -> 0 bytes __pycache__/delker.cpython-311.pyc | Bin 2670 -> 0 bytes __pycache__/esmeyer.cpython-311.pyc | Bin 2688 -> 0 bytes __pycache__/gastrokaufhaus.cpython-311.pyc | Bin 2740 -> 0 bytes __pycache__/gastroteileshop.cpython-311.pyc | Bin 3035 -> 0 bytes __pycache__/haefele.cpython-311.pyc | Bin 2674 -> 0 bytes __pycache__/hornbach.cpython-311.pyc | Bin 2663 -> 0 bytes __pycache__/hygi.cpython-311.pyc | Bin 2641 -> 0 bytes __pycache__/ips.cpython-311.pyc | Bin 2667 -> 0 bytes __pycache__/knauss.cpython-311.pyc | Bin 2657 -> 0 bytes __pycache__/kosatec.cpython-311.pyc | Bin 2654 -> 0 bytes __pycache__/lusini.cpython-311.pyc | Bin 2660 -> 0 bytes __pycache__/megabad.cpython-311.pyc | Bin 2663 -> 0 bytes __pycache__/papstar.cpython-311.pyc | Bin 2665 -> 0 bytes __pycache__/reichelt.cpython-311.pyc | Bin 2711 -> 0 bytes __pycache__/schafferer.cpython-311.pyc | Bin 2701 -> 0 bytes __pycache__/schildershop24.cpython-311.pyc | Bin 2724 -> 0 bytes __pycache__/tiroled.cpython-311.pyc | Bin 2661 -> 0 bytes boettcher.py | 84 --- brewes.py | 53 -- bueroshop.py | 53 -- conrad.py | 55 -- contorion.py | 55 -- delker.py | 55 -- einkauf_suche.py | 597 ++++++++++++++++++++ esmeyer.py | 54 -- gastrokaufhaus.py | 53 -- gastroteileshop.py | 59 -- haefele.py | 55 -- hornbach.py | 53 -- hygi.py | 53 -- ips.py | 53 -- knauss.py | 55 -- kosatec.py | 55 -- lusini.py | 54 -- main.py | 178 ------ megabad.py | 53 -- papstar.py | 54 -- reichelt.py | 58 -- schafferer.py | 53 -- schildershop24.py | 54 -- tiroled.py | 53 -- voelkner.py | 59 -- 47 files changed, 597 insertions(+), 1461 deletions(-) delete mode 100644 __pycache__/boettcher.cpython-311.pyc delete mode 100644 __pycache__/brewes.cpython-311.pyc delete mode 100644 __pycache__/bueroshop.cpython-311.pyc delete mode 100644 __pycache__/conrad.cpython-311.pyc delete mode 100644 __pycache__/contorion.cpython-311.pyc delete mode 100644 __pycache__/delker.cpython-311.pyc delete mode 100644 __pycache__/esmeyer.cpython-311.pyc delete mode 100644 __pycache__/gastrokaufhaus.cpython-311.pyc delete mode 100644 __pycache__/gastroteileshop.cpython-311.pyc delete mode 100644 __pycache__/haefele.cpython-311.pyc delete mode 100644 __pycache__/hornbach.cpython-311.pyc delete mode 100644 __pycache__/hygi.cpython-311.pyc delete mode 100644 __pycache__/ips.cpython-311.pyc delete mode 100644 __pycache__/knauss.cpython-311.pyc delete mode 100644 __pycache__/kosatec.cpython-311.pyc delete mode 100644 __pycache__/lusini.cpython-311.pyc delete mode 100644 __pycache__/megabad.cpython-311.pyc delete mode 100644 __pycache__/papstar.cpython-311.pyc delete mode 100644 __pycache__/reichelt.cpython-311.pyc delete mode 100644 __pycache__/schafferer.cpython-311.pyc delete mode 100644 __pycache__/schildershop24.cpython-311.pyc delete mode 100644 __pycache__/tiroled.cpython-311.pyc delete mode 100644 boettcher.py delete mode 100644 brewes.py delete mode 100644 bueroshop.py delete mode 100644 conrad.py delete mode 100644 contorion.py delete mode 100644 delker.py create mode 100644 einkauf_suche.py delete mode 100644 esmeyer.py delete mode 100644 gastrokaufhaus.py delete mode 100644 gastroteileshop.py delete mode 100644 haefele.py delete mode 100644 hornbach.py delete mode 100644 hygi.py delete mode 100644 ips.py delete mode 100644 knauss.py delete mode 100644 kosatec.py delete mode 100644 lusini.py delete mode 100644 main.py delete mode 100644 megabad.py delete mode 100644 papstar.py delete mode 100644 reichelt.py delete mode 100644 schafferer.py delete mode 100644 schildershop24.py delete mode 100644 tiroled.py delete mode 100644 voelkner.py diff --git a/__pycache__/boettcher.cpython-311.pyc b/__pycache__/boettcher.cpython-311.pyc deleted file mode 100644 index 803f7b259c59e7d884d348366cfaddd5eb708daf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4367 zcmai1O>Eo96&^|>iPn#8*^Vs#LP?xWoY=C9rU;q@>DE6hfL@>Nc$3g zm6GU&@y_S)@zNooM3h8JJ=M>;P9qMNF8d($+@i9^0!!@x1EuJA8D!fArWO2$KTHr+u2%Tg-OOhH9xMW5aM7oL1 zH$nKECNAZqJDFT|Hd%iHTkSx2GX%}&U>F1?7y%_*+h~aqm@PKp7F=5>fw$2*lkmV{ z+*TO&Rf(t(`A#mGB5-Dso6N_8W^d{`QJ7*s$dM@)ys zemC<82*hJ%K|+t3%M!(6IZl*CjpHmYeb0X|?6R;*q$R6`~<2L5p4>*jl^?I%?FRz!cDP5c_3S zD+R<=HK{pBhXoonw8<2hQWbx6N2e6fN_Bp-71xigU}r|DZWo7!kQS`N%Xg;5vrW_I(bA^A_CpgP()sFRRj1{{*(;nYDZqgvbJs^EIQ6QLE;& zS#bn(^7`kn(r`eb*I@<7I#|=94NZkAz-r+I;Sj{WBmjGr2$m1PCj$%>s%i^A%88oQ zq7v;8->uMH5M?2=c30FSVg=y)1_7(nl#OAR(rHh6yqH<9SY}K)0TiVJntb%A%~kBW z9Y)n(K~qHE_Ptly_|uTlcggI#w2e(R`fo34?|ZVjv$>7SV0W!wv_93$?z0Aa&ScN& z?70IkY6$_K$;S5Cb9?N$KlGc!mksuc$zIXfEB0_@mcjO$Y`@O-+q8YQZ;$QM`^OA+ z++@dfb{v+k82WDKZnE^<7jA+wG}$VYLZA2#|<+|7d|J|Hgv^Hxc(PQFn2q zG;7`Vfq~ilKuXiH>gBPqwY9bQVvZ=8G_R~`qx^DQAY-rT4d%NbgUBQ^>8wOFGCDpg z%GsQj52UoT6wmSsgwBTOMQxLMvNwa!JVVQHlMnnf{s^e1lb^bF0yJV^vHarmgb&5 z+Kqg*Q6*H+9S5#_D64=MN@}ATb;%%+w~`&?+i#Gi9E}eo_8}w$>g9az3}gl*Hmxj^ zMOjo;5?elGi4S)w6tNbbhOEwVLuRK?-C3TTtcjB4nx3@!vI&tY9^;7 ziN)H}c}cQ7Sw)mJgT3?q=5w!3py6)TG9RR&|Y}x>)XGc*GDFd@T3`@EZ!{R)_vTyhr0|MF>yr4 z5t|a-!_nP71D`SR86BUYLbUB;O8sTmFKToMroo=wh}m=D#RDU7#SC02P62QCJqGOR z#n2x|e>eJP_g_DLF>0K@Yo5OgL?be9f(_nF=?f`n&4^h17-q2D2gu_Yf&5T!jT!7o zlRc@kC(B)@4-nH5wVUm!SHbYpp(istGu!YSxM2YHZ)w$A&l~Iolf9s`7Y>3{TQi@{ z{P?4-kBatV8#WEHXBPo`pPM1llXj@_cBz6!~E%)TEvc1I*JKvb-TD1rPS z266T*HJd@J?bgPe_PzKVWG(dHifZRI3Pre`165KZ7Sd|Sn{(+31p1xN_?q+gB@Pfy zXXNuGz^MSbHk7W_fH!XPu~nPR;dLm?nglhpdw%r;O0mXoh2(|6BHI zC9}Dvd;&C@uBZfBxJ8C3qZ$4G)iN5?8*3R|&>L$Rjp>cGj4tVowT#}^8*3R2=#90E z{6+gYz!3(LqNB~O@1KG%{ua~jEX0`x`fm6HF`l(Nh{`+SCeI55u1V(k-tw%=<95-=X$MJ7) musFH(qwPCi-v8qMlTUX(HE@rKdw{!A54sV!3wMuw4gUpQ^7u*s diff --git a/__pycache__/brewes.cpython-311.pyc b/__pycache__/brewes.cpython-311.pyc deleted file mode 100644 index b722d6eced14e6fd76643928bc2e58f30a021189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2674 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 diff --git a/__pycache__/conrad.cpython-311.pyc b/__pycache__/conrad.cpython-311.pyc deleted file mode 100644 index 3cadc064c3400447b647cb99261dfa020e7e9df6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2635 zcmZ`)O>7%Q6rQ!m&iXHj)6|XArfeIh)JIWGFeaZLu~>c1Ud26?0p%Q}SfJF)xw50(+N<`B1yyTC~w`;2s-59fJE21HfbQ zuasCP(fUwlvzFLKw$($^Rs+f~0+Bb&cnkuF=X(p%TpF7CHNsC*B3viO2p2yywM0+2oHI@J@ z)Z|A5@Oa+Efo;WJv~4u5R>KtSt-DjnEmTX)#4OpFP>{U;F zv_P3!MQyK2gdQn~qb$ammI1MfPz z2>!$90HoSew_5O3tRfnF!6~%;$TnMyx9n-f zS#;u%+F!R5T&--1&T%mBUukPZ728@-Yh7|jBce4n7@!U`e8tmhPwwzgeZDTW-hlvS zK-fE72xn9^ubhiUmzI_yBrtGXhzKaEpg2xuA{jL+ja1~fpVPZ7_%bLiAUsr27CaOY z$;YvRaIzK-1W4VL64^UWn)@IPieTQo!W0<+1c|0nKC`WnkS0M0GZ>}52Vt9Oi@ats zafSLl$Gtoiog)h?Q6ZN_vbY#UqP!T_QoN!iGbp-GH^2PSJuHcen#^VM7YZS3lBckJ zz_64{#wF!Kq>egC)>n>^rUdlBY^82|aPQW7;EUy&Vvn-K)F}$yJkAMPQXP`xSwsjs zlTut!_(JC;l+t7Y$%uQOa8u3|dZ!3U#7*EdO30$3ATGTRiD<8rrN;5opOcG7=4M2K zl2wGya$1%nOK@X2w?wwf6*NvsW+V|k{RYXANF>~iX$CUkgpfw2J&jaMW8HLUvMNfZ zZQ`PNG>?&jLVkhv6BzIzZ zX{Phq#O&O)X-pG`>B+~_h*xqNP9l@F%;S<|I`UYQRnsBLc}+FpEsbPY*7VSmPoOjw zQz_FQmkaTX#G~3ln9fS7Hr*BH;WaGPtA?*H@F@!f`gm$WzTuTbG|fAut(+?;+mVGpN4)IdSd@&dUL3JX2v)(LzLyf ztPz+kT_q^?$S!a=&OT#(dOKHUPZ;b8ojtMB-MO4)ionYuIe@s+z*O4bk42sc@t&&EZW z=L@H0B`JFW6&>3b29M_xc4v6Z_ zbq5UU&2DmR&%`5|;ceSu(59;>dU%}(+hxJ!3m4la! h;AP^o^u`bCuvDcRhdvj6G=W^IxQqi6a02 diff --git a/__pycache__/contorion.cpython-311.pyc b/__pycache__/contorion.cpython-311.pyc deleted file mode 100644 index 8c24a0a6000833cb15d5d643f215efc48259be67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2651 zcmZ`)O-vg{6rQ!mX2CY#gg8JTS^~6n2&Pi2RthPh1X>jus)j_73}j`zV^~^AlyR|k~jq=xhTgm*`>IW?x@?5-3m^6 zq8>-aiZ|I1ZE$3d!Y3P}O^)nUd`W-Q53*n4?{LuoX_gvSTx<{8?n0zRYI?{a^ceod z5^V)-fV9?X!QMCH{KJ7~3>fC@##OQ)QTY=>VSuN|ng+dVYz^ALb+Rz-OkI!3Iw+2l zTWJ#4i6q8TswC@jN@eK47>OCWoG_G`l#zbsfraA^w;~thg`VBV!C#=ghx9T_gqF+l zLjXKJG(c$GC2?8wHM;LwcV}JO)vJ{;S$F;Eba;hQ$+{%hL$G^Xw%x|1x$0i`RYuE< zsZ;dkk^~(2k}SCsuG&3oM;rpKjU{w-f7E)l4A*fMZ#zC!ZOi1^+kt)Xb`|dmI*b0t z=m@0VUa?vZl;nDAy}LAn;B3n+rICc|n0qA89hCKKx0Vpqz2ub|e&lN{#_P_s?#+5> zpWa)slN#&UWWD2PKDgdcjmkFEqc)GJE!Bwn*x-=fU$u*`-X7lYcxApK)xUv+W>DBa zo#|Q9^|W?=XlQkHH3EU5rziwQL?T0)5nmz~Z@%-4y=lg;kr<6H4a#cT&@;XzJ*h;} zF{%+7FGm63n3uBs4^BgK4=tiBnr~X?vYdoEKvOJVxHch@A@=YRC5i7**k!vSuiIQq zW9}{pFTz9DU}0@YN+pRZuM81cU5Ob9(V;X{VVPcg(R4wPH9ek6rbjZbI`bk!RxlTo zR6M3=BasU54D6zHL6bvfXueptKfZf&EA-V`S#iL)Qsxnv6Y;?`O-V*vAJk=qh@vj* z3IYD!xDwMeG1K}!Nf@d`R3dx`RJHS&&MDwbgbBJx7F1c&h_HAFi5PFdn&b4zukjV4 z3NtdGRGrXsf{_$p31N(;R^jwQ#t^jlk|L8Q-x4(viGiA(mWG$k5Q<3vm)M4}M5JzZqyhpb0gX0u%%jNAT%tV*S6+Y?vdW$i|=lf)Is zpp?C#?Y%N__1cwb%F>7JOUD+8sHF@VCpPbx#}vi(q^Ydxw#V@a8{ae_&+@j9y}|-n zq;eu*2V-g`wxo!pd=a*{n6T}pqDP4aRm$>0>XwaRpS0alx-TLs>`HCybc~L0SZI)O zJN}YKr{`dXK{W}SGl%{Sgf?&F1Kn1jJNMqc7ahCA{XA<1$DrmWVeIjJHhFt;Ba_FS z7Vb20=TjWK`^wgtJnpt|_a5%u#k~*4tiG||$9|jmbHuz9&G*e(eY1HyXW=;$&#^Vz z_kw-9!M+DqzPq+FoevIM!QtFw0XOgAwq4wo#~}-cOdN7F?Yp>r>r@{1Te#oE{ft7( z9%kD6ZQoS%&;7{Xu@$m926pE2zG2HZoEr!1$r~KF=}zBIgFg)Z;x@-;cLwuk=d81H zpv{Noth{#9m+xH8IX}vR-sVLy z8Ix5}%!IEK1=5Eqyi0X?g(w1hB~2G3Ls%fPaH*7NE(+6Oj&?r_feA6bNvt^fc4 diff --git a/__pycache__/delker.cpython-311.pyc b/__pycache__/delker.cpython-311.pyc deleted file mode 100644 index 0059d910bc976619bf3a82cc747a5c9c8edf0a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2670 zcmZ`)O-vg{6rQ!m#=n3GaWDz#CYU6IV5e!7R7sRj0*wTPv=FdliLQ)yj2Cv-&g^ap zmXX{jRj9-vl_~{Qt;(UHw5il<4?R>$EA`ejS_x~VNR_G{azjG7+;29A}Oq^k;Y!hvgJ#M#Ty9gym z++oR3bV@Dp7E5-BF3BDDSh7>}O1`+yl3PT7+|T=X_d_P$irRS3l8x?#yKDfp^WH56 zfM?`aF7W`-wxU3zmaNkaL*c`@`02WVj0RaMKE_dRra)d|X62h0}HARq-qC}DzDJm~ty7=am=u3LjrsJN5 z@Jh~`RwXf#O<)D#Wc4`^01aBY{r*YPJOK+J59U0pOrGIE%~_w@*1cqN@@mriXuT?N@yug(UNHtEt8C7S6+Lri-MvOlGz)% zuril`MfQ3}b3?$@SA}w;L>I&0YPS>VKA^RrNoQB1!JfFF5Lb6ZRY^!(-aUyl9 z39XLOVGj!KpxoM@SFJR#DnT^v$*kiz+UD&$=d!G&);o;whf4luhOusc#49^V?Fs8#8 zU8-w05Z(!dpH6)n+g>OJE*pW%g|QNB-G!Yyu(Jq*1`O&jXlc53VAsa+BJ49@pAP#d zg|=NtwO@CBRnx!n0AFY$XoLo~=ZfBIhWA=wgkX=&G9)Os!#@rFF!;0m*E`#T#q)QK z^LL4|7@RRk0MDlNSemp(P$=9X7OrD^z~Q*?!sXXn*`n)|;X0+ePL(=)_WqsvPv>X|f|$g1O1|Gnigi ze~0N(NZ87PCY59TL}eJM{>jrUBxU5t{7N~ZPaY1b#d6R8fD|p8&0sa63FUXxeK-cw z|7J{6mT8|?-Y!20s0tFYLX93mS`I9un{|r+CC-uf!0t0$uErF=sSWDoF-dIauNN=nq(4#lj67UwRZx5bjI`%+g zGsOVtTg&a(L%KcmSLo!%QT>gHVrbF`O_G?VQE*g;o%+$UMR?AD=k!Y5^8)gq>>=yG F{{q%9k;?!8 diff --git a/__pycache__/esmeyer.cpython-311.pyc b/__pycache__/esmeyer.cpython-311.pyc deleted file mode 100644 index feca087528b9a45f5a2fbceaea83e11973ff0437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2688 zcmZ`)O=ufO6rPnv@>;U&$T9L?9M-j+;@Fk~Z3#_6;yQK%apRo@i6Xy(nE z@6EhUA z=r*IhLV9N+Q>%2W$H^ zs@W$Jnn$B;bGbul!^r9W5{W%$?sfb+Nzi0E7fc(f63r&4 zPH3{41b|?n$}W9z7={OE8RgMpV1vtZ5~`W#bI-jXTnV|FrX=+}8ud7y=rM;&=q%<1 z;nkb5t8lO$lQJsN`y8Q zT^Dl)&XJUqni(3g=<+1@D}{b^dOyi2H2ZXW_nQIDG%e z<{L#kVB>+OcxVR?J)E+Kr~a7w{oJ3|t+UsP!wdHCLJ?oL@pTJdXGirs4G-^xhaX=4 zc40eR3?H|{#|!66xcw>a+QD5#9ILUVJdVy#fQ4iy*;w?;@XX{23pz+Jz!NX!C;>KUnG-+C^Mzk2~C*e%2PgKm6J3z1h3) z?RsJ3r60AnTkS`S{Fu#;S^O9?Jg5HTDu3uo`;_1q<%Ci;r-fyQp!v#39^v zH@D;MwYpu8D6>6IU diff --git a/__pycache__/gastrokaufhaus.cpython-311.pyc b/__pycache__/gastrokaufhaus.cpython-311.pyc deleted file mode 100644 index 10d326bd60a7e5f48b52bf2886a5aedc20d806c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2740 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 diff --git a/__pycache__/hornbach.cpython-311.pyc b/__pycache__/hornbach.cpython-311.pyc deleted file mode 100644 index dc2b515ca47458030782995572e51834185a1adf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2663 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 diff --git a/__pycache__/ips.cpython-311.pyc b/__pycache__/ips.cpython-311.pyc deleted file mode 100644 index 8fe5272d194458963b7f6af0dd96fa53d869e473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2667 zcmZ`)U1%Fe5Z;qkvMgD4)4hGZPOB`iR0J}wG*d}V+%ynL)NXVvri{w z@2-x83~ETJ3wcPP5K~&}hbDEKLSOsPLLn{mttWF3aS$k!KIF|{@{*^{o~_^1d#l~q znQvxiXJ<#>`Tbr5ZS2<%$Y2vf|FA{5IS+`vFM+s+L?m)DN^>!eW3)qdq@6LRO*>_r zcEwyajb(SbDb{4uF4>cAj(Kg`E&I|fu@;+dlKnBi*djLH=3=d+P4uof*j}{Dfyfcj z_kcs_A^i4RECAeA5~$~bou)baH{^fHfJ2e$5ySKiZt(RJeUR-QEqvM=y(8n4=cJ`xGbxkHD7hL z%zU())>@{(J5QMwok>Uip7kpZfv?SFbnSeYy?PJVaUO5kX;rJs==!+8K6tCf?SEjIn=sn?inIFpF- z+$WCiirTt6@1`Mbpu#|6bE9{8_awR=SZ}ID<(nE&ciNS9rL}-IGyEHr^`%aHm zC2J3Uj9Up8CuQo+V@_RJo zupHr6EiSII?C1IC1CeQmS#jf zp^a*iCKGVjosi?ID&&q_BuQNni9+~G;G23n*E0i75`Ky@F-kd;ap2)smDHu?(M%ezmr|D(ss`2|AT4^kU|wg<+qp)mDxe5o8ur z3)>TOhd*evo%z=O;%(DW5U^UNija;4^shg7=fk4E&-C{d-r04d_OZe=OfKK2)3>HK zaz)%@;vNI{Ji&pxCpKRy;yx4iJ;nn&c;Nno8JhTG;`fVxMvV*e#n6HoS}5YEiK7ON zGE-fT1EHNj=>FAjquWcxz$r6usxV!`t&efX4(=%8poxP94%(cq9o)6qTf~DV9yIV^ zh4*#GS5@vaFKX%D44U1;+t-V}G1E6zn1qcw7dS}D?a)u7KaBqD{O!v2Xz}DV^W-&P z7K8I9B=ADYh^AmPgHquNXm~nzk;^sm#N#(w`J$)a^z<8^{!+)lF5;TI>|tZ_NlV~v z=(CwSGaK;jIzjNvjhb7H){{lgu<02#Jj1|nc@6KmA|5yKxPiyPHiT~G*38G3Z(lCh zAMIdQ;Sq#%Tv7xf_ezw=P%RYxJk_KXBJ=E$RE-yPevwH0yYJ2MbMP$B@k1PC7d6yw zc~nSQMbgvzd48U#+d8}+?}B1U~Lp*M~CUP9wWeJ`OtqrR7ruV8<>c#vz~MfJlh zhj7bAZpYbeIJ^Ju1sxa^LkKcudZ2`@sJJ D;>D5x diff --git a/__pycache__/knauss.cpython-311.pyc b/__pycache__/knauss.cpython-311.pyc deleted file mode 100644 index 48951bda3516d61f7b3caf6c986431672b8beb3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2657 zcmZ`)O-vg{6rQ!m{}?bK4km$af=NOEyHYDPN}_}kXeubAg%E-zx-#A|Uf5kbv%4i& zMslN6p%RBwsuWbUDu*VerBbgw^iV0S)LYkRC9IVqRjPW(4He~*Q)kxrw`F!b^XAR> zX5PF%f9v;q0crp2%%gW*0Q^N43d|(I(krc8j))P;$f^ z77azGcifgKn)WqqumYICvASWj*Pym268_%rSbGEJ8b1J(zd*j1Y;)rs~*?8MiBDYhK-Gb%4+FA8gS4&h! ztEtUpifHF9)4V-ttG}~;#Q>tKr;M(hk2&b*U%{ot;b7-@JD4|2>W zwopZE&6#uJu-a2$0N&H6UCucI<^yZ4T2#)}h}vkATWS%!w-KTC*4)yNM3zsFRrjk@ zqfdA+4f>iUvmGf_%_x_m(Up~z$g&*Q6eS|a$#nDub*<@ArcoRxQdwV0mBdIUjunIx zl?)&d8mIKegKjcB28$pE=Dll7j^RPoKA+h(eB?fos40w+-+?}xX^XsWGI50lJj=d1 z8=WBsD^WfzAz4_CB0*k`Ye`Pg5-Ait)GM?4%6ml=6g82SGFP)@ZHRkoU4#ja3pUQ9#eWMsg$)>1)Td>X>kpUqq&T5viDFx#`ekRS-?v=ymgC z1|tQ@3B;w791;<+m&(z1lOl(yGfX)7_Qa^!loVvX3@{xDk@(T{5J{d}CdCrdl4m-n zMsLkbO=4O!OkXCxh&Uy!;RG_>mUvtgO-BX`vT8a6Iism2ysMGI>Nb7U_zP$e3(2Gz zh|Ae{O5{+*6sEIOp-r!1#Sf=pu|hAT@0pO?lQCP$7DJp!jcP(`qUx}R4YyI2FC|H$F%SOs2RA+}_`3{$SN@%SCukeUkCDmYdpLG~Y&~0mod)dGVdrxgcyxC2 zOaXQouxk(Y?82TW!$x@cx8YxJ{642&pDl#%7~wkwIA_2)9nR6CI`#tL-9Y%s)Hk!+ zLLqR`2wcpM6=CxpY~O|L1sF77P=`T_)3FOXHcu8{uK{~?*h^Jt*@Kk(Rr{A!{!1@t z3T+0BQ2+LP!FSp4UCxgX?1|e93Civ8kAvS2{$&5<=JsIW!Y$*%Ey64WXABa+w^RCT zii}23$loLq?i2gK;TU-C_Up}T!F}3rpVr-{i|sx8fbn!#!}`ecrof}{r{f#r>*U+F zlZ}^7;Az&IFBIJUhPz*P_Y;Q0t9!2%;E(}_bT~vc_dOiHKmPH=gNeNL;dbf@H^)hF zLFTyZz+^m;Vpotza#Uj9r-`$yvX-YxK~GYX9k*)AHMWnz)LngTrduIlD+`)biuF_F zWu)@I9w7-XrRB)NYAK?-kA_rZx$A#Gik8Wwu^Q2YQXX|4jluNq7}Jtv+82~JODO?W zK|)rj(PztX32_{zRo-l?iT}g$gXtfRWg{zQU%9VH#3CZPiZ7B4S~HbD$UyARFh$U< z*Y_gm*Xw%`MD_Y!1aIl}y$FW%`d$QGdVMbfU*7um;W?&lAJh+141i7R*PAPHp;Sr7gfo0pDs diff --git a/__pycache__/kosatec.cpython-311.pyc b/__pycache__/kosatec.cpython-311.pyc deleted file mode 100644 index d6d437f77b578c00e58c4f7c9e8117b551967877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2654 zcmZ`)O>7%Q6rQ!m&c;7U+y*yso3d>ZLXyTt0u`yhAx%IeO(XI{r9fEO-f^<=?%JK* zC5>?;Q&l2JIRu2%NKlajErlY%5eW`R1&(MPtrTmeN=S%9Z;_&2dSYgs^aHm}Ld)AK_K)5zL=-U3U_39a}!93iyW2)Ac%JsKH_JP|qysPLu zc#hE_NUfu4wH$QhMr*ChnE~W%%dO5xfDOz&g6B5Kd$!vgL~Sp4g{B|adW+G9Gp%{^ zUfiQ~SM7x6MmBlxC|C%sHPxc>O^v9HBT8#6qVa7oKpYy_#zmm8`D4r^ID+u}?*D zoLuT#$oZEvS&C-kSVcHlc@G3nWMMTXWMrg>=@=4~bX-sIHocg`H@o`GcR>-c2G}{rT~oaT)A$)vw34H{KaZTu}^to8W*`>7H0%K zsSRnOCLzMvo0Q_J%IDhNLMdGlkb=0Ygr0gX7nvYD5jTbxQ9=<_6>*CPkf{DDS!)zO z`ZbwG3O6GXl%gSghSOz^EWwT7%nCU%m(w{lxg?3`(bq_cMx*`hm}VghjtPs%axWqc z)Aw$9bVU;-%QbezI-bQyMM@I!nG}yCL~cyu>A6YH!!)m1fh#jJ{LI+Zu`9Dv(^eoQ zDuM&FJV}Z8)M_Rx2z;7kQcOK)d8fx_=ccb=nno;tHok~>HKXGsvRKZ_qiYvMJlEkCRl~~?#;*TlRCKFG+pt;3p87Q)YCOc@bgGAx+8NSO!IBddU0}fNR{!b=u zO?*6gd$M5vFn#eB%ky$vRCqqucO6M2k0{(5SQFDo;;55UjT3Y(fkbYioNq33*ZLVu zKRx{+i&aVJDxxlz=j1sK|>50QZiPduGcl{4U)w9_Q)}p#teoK+V zF_?awG5zXT?u7c9{T%H0qKBm^k>@c@DAv)MsCTjtrr%@xYV1&b#$J#~CXvu3e3nem zq^bT%8glInQvxTA`dR`pqrR5Fpiy5-;B}+EmcX!4UrV6NsIPnQW#-5psBdN&00Zl} y9e1bU?)*FQ;#RN0y2a$>Z diff --git a/__pycache__/lusini.cpython-311.pyc b/__pycache__/lusini.cpython-311.pyc deleted file mode 100644 index bf54962de47bd6a4c79a97c6c2740bbf7ed1b02b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2660 zcmZ`)O>7fK6rQ!m_QpR64#C8M(1jRE2(c@*5)vRlA!$_tAq4`GAzeA%alB-`HnY18 zu^h=oR8WZnl`0Wct(rrjv{dS~hgPaYEA`fOv=Y`zNR_G{xJ8P%aO#`&zgx!RnKy5~ zH}mHG?YE(jA3;0#%RD*fL+Ed|Xf$`7*!lv92S`E^r=T2{%iDfZWc&dCz6=XtCFnCdDX#9kd&dz8AG|4HwrT^JaBT_QLd&8^1{pvvsDG|1Ee?A zMCf{xeguFgbpeD{T@ttIF1gm*&uQ+K+}#h;!4ZvCa!Ia7AorvxyN(-s?XwCTDA0~?(2_gj>b$da#UaqOr-5#tUw2-ohO4-Q*PXCxmt}OPUEm(P-llg8T|)oS z=ru@vuqAap)S$bi_2I@2g124oYpf*PrMXA)+(sqO`nCq5eU`kE?+3n9VzTQ^5-M?@ zxS~z5Rd2~lWBN#wfux>p?MmKBG#_5|wWCVDZq&VgwXYo^`MVMN{h_6*E~3%kOfizx^@4UZkyu_{jw^;Ht8!c-i5JYV#h^w~G@Tun)qB zcy%B#2M22jDW4;%yp$lax|A|9qGqJCBvDtbu=2`(T#+?BozE3c6l2b&$Y6EAaV4Kl zDcXs63$+){*LK5DMrLHL*4IC{e`783`AUUxxPzMMKciSw$vKzb0xt9v>Z`tnk=)N?Ihgdy(jrCA#e~R9#kV*VJiy zSAi0ZsA(eRGa^w4*h?4LyP?ie<_z2Q{-hnu$g0%XwmoSDd};T9oFpzmwWO@(+1?9N zm*y_aP*yeUKq0kAL@jU7G_iR{Jf$eMr$A*@w>?f2*!YG4m6f*x%=8Onk;<8j9Zspm zR8|p5(-5||R-$cxErvvcDouJJf78ZrPr>eM*o%k?GpUW8iK!#h8x1qvwsm`&9tJim zUs?uYv5fu+MecoA2@PAJ;qtqiUetf6d`wS0k;DHK`SU6(hh{GA&z=LbMDtNzz_nUY>Q=#t}X56m^zHISd@+cTx zi&)XI$McoIF)MJaJPFvHmpKT@$FU#BzaRg}{p#znk9|6QZ~89$Hr=rC z(u;a}&E7*5e$3*>OnwX)9>3{7S;40)e9FY9nC5{y)3>HSK6m?E+4)hH~!MMG3RBSJ4r(vsck6v$I#xu-VzGC{T8OoA?0Nzll1BSq|ag-QtEjYPzF;Mfa@j oFyA;|iOyQlS%_*D2RlqWVD5Ocf)85wpxNk~0R$=Kjyezi7v|!Qk^lez diff --git a/__pycache__/megabad.cpython-311.pyc b/__pycache__/megabad.cpython-311.pyc deleted file mode 100644 index c5c6ce6e05595ccacb27edcf07a4e4f0c31d13ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2663 zcmZ`)O>7fK6rQ!mj$_9OhSVg1&;^{L{5h3c2?15DiO6S)#cJ1N;DOfx}?sVT&kP&Na0lPmZM!Z1Qb(o`ZaQ0~ccFwrQ)r>(wn3-dqRe^gK z8Fe!eTB+0b0q}5F0ig|_#BKOXzOCkc>e71xP-Uduxi$2bgN(B9K6+JcLQBQ zFIn^oq|w*VT8VmeyS6dtNf6v^rN>)IxXto_6u5~>fvr6rqIs5rQpZoBR*l)VJ4vX- zed_D4t8D~JL7Fg*))`3ZY`3lyoJC8qjgDqisiPfrd#~2hjF7_Z2xF+}l(r;t-*jI? z-k{pwL_!zPaM#&lU(PTJ`iY5&wY9aRN|wd6C?zv_b>b;|+TtFah%}QMPm6S1)(WOk zjN}YeNftz^6Pl@~0$^FdvZJ3Jg5fS&MkTZq-r!1{gc^?e!go6Y2Sdi@D9QeShJB7N z`KH5(I*WXse{pPL5jNH*q`XQrd3A!w+Nx+~1>MZ#$b@HLVf{t;lp^Z}SX!7Y4!Kf+ z;XK4CC7%%$eKOgA@o<8E5QZ|c;)}Ju_2HdsoAEE#>x^e0N0bFdF;jH|C2buV-?KOdfqpv}7_l+)G&ja`2qAOdS6*F(^xTCtzxZ ztT?{8cbx+TN_3)Sh>*_;L?PfYLtyuYdPmuFIKI=fPFGgeBv0%FG77w?(+PT#unJX^ zvfAea&(B?4Jb#w5>fuBR;xZBRyh$^}3AyT`qBwy9l{Lc&xN+d%YbI3KkP~6PPm^UT zXR}UB)QVzG5lGz;POw(0op3FZ1d}RtI-S4nU^u7X^mzUvg2G(tV0U8X@Vkx1m~F9_ zo|=vUpVcuv3*lHs|3>4tuT-Lgc66}(-cAth9V^en6o`B_e`Eeuv4RI|JYeC0CpdQJ zjm;w!JZR&=$N1j!l*4tGN3y?%l?{6&$y5+`@5})3=TLHV;(rkd22dJXGg>)BAOU`#g-g z`Zwct|LB9IO5~&+Ia!{CllEWYASNFqejfjE{8#_)=N^n#MlRYT7lB!cFWL~lmvYwS z9E^5cE}sL9(Ec412#h@mMXheW5;|;$4qKta)!w5!i0kZghg-8xx?*<{pD)~AxCOr* zKM0-&QD?W+JyHpc+M!V^GzyGB*a}Zo@U)GmEj$f-gYy<{EPQh2=9#klqb$*#kRYg{ ztO-K#*kz(Xero(X)R0$+!n0S>4PG+&G?Do;wYoCJ4|9~g)bL&>q(i`JvZ>ah{Ghi? z)<5p73aNQ5nO?8O@}XBl8gV@MKOo&K6!O$ansP0J240P!?3+y4$Hwue^|x#3fDKuN zgx$TdCaOdb=n=Nu*A)9+<)Q3j?E1$I*cYKwDpV1LOw!{ZU3r zsMXr5Xu@jkRdn2H?Nu~wwe~6+v|4)=Mau4P2M=+3cTnqamP5GfR&m?kZ~6QG9(a9o o$l^~|2IlR7c?<7n5dcyBniU_e;1L^-SYF?WAV?;EzkA{T0LICWS^xk5 diff --git a/__pycache__/papstar.cpython-311.pyc b/__pycache__/papstar.cpython-311.pyc deleted file mode 100644 index 270b882271f31eb4e3c0de42fb6dbb24e85e6cab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmZ`)O=ufO6rPnv@=CJo$Z-|hiPKGOr^t?_KpPs8kOar>PnUXDfo~=A*MgnhbDEKLa&APP)G~Cb!8ST76OIRLv99>OHO^WvVPOdj%MDx z`QFT%_owfIK|g}_W?-Dy-0Pz4xNa7Tf;o=;}XqV#3xZ`ezb}KmJ ziF+IxE8a|7yv?CK3ZL=C{SNI_0-5%ByF<4r!FW(=mwb1)cn9f}{EIGj7wvH&vPTL$ z;t+ZazevC3gaAPE4=yJ+XX0k?Z>X`>lPCCj}ltEsYnPGOyzk-I3uF0R#il2kNUE zOh>2b9aRdnX+ zC5>Kz)O+euH-c5VRa)<_?jU&Ejn3*y!Y!J6B+ngG@T~8tA{uAOE4BT|H%pASyh%a@ z?h{vUO>D(m@X|qjpvFLwuT{H(cN|?0t+X|w3T>^Z)h@NO5h3|o5&BTWEiFmp_;hc5 zzfQIKL_#wt(ms_xkk<8_b|MyAT3U+c5;;vz&`~X&%|#^=d&b;rdo_}v$#g!D)-wuV zs77eAmIQ!cp~^1ZIS9i8w15iex_^Z$a1yGU=rh-90Iq~wO;eKk9z|TXD|*!C5*mwn zL3r_IY!(jIVp29kRCzH*WOXrNq(sd~rb%p9wPnR59VlAGLrhJF6#;boxMpV zp=n}%&wC_gs1i|$Z~@fQPUQP0K~Ew~&;>HD%9=)mgG)2FBbBKpe56aOrCs0)Mzvs>87mo*my!(Ahvsf=#-_p?J-ncR&3YA zIeUMO5{;-yB4$$}Q3zN}7uma^(oyCP+x5Y?-JX(Fsk&`@k_!0I_JN!vE<(Metm@g` z>4~ee(^Hhy4LguaED%x48Z=34-VskIitWi!S=DWitmX{e#y1V9t-Kvzwx1^pR8FPr zP(sZo(uzoGhOoVrB5nIC@go{ksnPS zjS}v+aQ_w_*u(=5$E?AzKgNEa`181V?rLdp)*75G;W-P>nRt#J)w2~E+zbsqoc?xp zqo}?$_O4)%nkP z)ZV)mwt7c4u9pHQt-#6RIAHh9aS)RmgFlV_F#5Cmw@VwNrQxgA@Ks=z!m}2{?_Aov zmWI&^%f(9|!SCBf9?y}de9-I=O8g;7z_KsnB;L_H*@aJf=h&Il2XGLJ>NY+i%FRb?YniS`54 zWwiG99)%pwWYy^WawVn@z8X@G=l=fzX+|!WrFztmE1A^yY7Axn%9NEY+dZ$nT}cb9 z%NgQC8+*B$$PiJatk~Oo8*-ppfhhaqaqQ#-?hF1@2CSlx)ATrOu)?YR1q1kiK98NFjR_cA(bHuo~>H=BDI1&YqMjSq8O+o*ZC%pu%kz5G0km*Lm=N5c!c@ diff --git a/__pycache__/reichelt.cpython-311.pyc b/__pycache__/reichelt.cpython-311.pyc deleted file mode 100644 index ccd38a6ce7e7e1eb18635e8102c4a523f2f3ed01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2711 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 O+;;p3lFZ%Z9Qa>q45%{z diff --git a/__pycache__/tiroled.cpython-311.pyc b/__pycache__/tiroled.cpython-311.pyc deleted file mode 100644 index c5f0d8dbe6214ea29257c9d0e81a08b526fe0f12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2661 zcmZ`)O=ufO6rPnvvMgD4V?F8Gi_A*Qs{hbDEKLg=lB9tvrpx30`W#6qA@ddSUSa>=Q0R$l$3o*m7+ zdGC8OZ{BzL{2}RVLg*j1aGHCc*!v2I`$$A0C!;hM<2XjUWLMf9bKA6A z#%WK?W7Amnrki3-Htmsp>E@WyKvWuNXJ6(tz z5(5u8gdV}K++rc%wvtdi7xrnIwttb}a|VoXR`Uv35UKPrp|Eg`uEK~X$*Kx-aE>gD z*`m3)qyghFxt%2mjfg@bqll6wWfU7XO5(aEC3Sf^qi3g{dtm2;ZCu$H`t))w9FHD=RBeO`;i@h*6OYLsvv>eUG zsY+;~@(=*Q(v=;&cN~WMXc6VnP5&B~=R{O>(-*Fd02~YNHAPAC2NZExuIO797gt%{ z^Zd(`!?UolIxJ?=M3I(j*$cUTTPiS|gE%i| z5^-6*5Us*^I6*xILjf7#*>d0d;NGpx@RzF<#vaHK4Z)BLW@$#$6WWj_X)*zuy$Lz4 zszUD26_V5yktl?JAIwwF=DH`rPQs7VMY5nss!I69eMnS)8}=HbPkv1-6NR6a0HtVz zp5pa14_ok~G_wLX=5so)CQ`CQo_tG`Xfzt>psf5@cwAg0mV1$Cls$LLqbr&uTdwiT z*3m2_Dp3+d$Rq_K6Y!WOuzN$bqbwX2p1O2(+-gZmis%3=PeO*UTFsy-3d>M6DXV>! z_xkwE?DZ+is)rTG#utg8W^|e$md{p?%d+LkQc2M)kECRE&BC{IsIWdOz`Vae7O9j> zTA{d-i>G9PR9s4+19v~ep?hy` zzEQ+IChmEPdv|c}gHf|@^pDZsulzZ0T)t84n=||7ig@0{^9G)0TXjAS_3ecE9$f!! zZaY;BoiRga3KJ#V`V@EU;Eo~=n>cLXu+8b*!JV5&i@4v!{RZx@@V@Ezy2^dwM=f2O zVY6#+`(`n4&J3I@jKM)iZg7y3+kKCRejNJ6{oA$eq2j=dIWPmvVtCes{JoJf=29@4 zVX1HpG<-*Pk;ilDnJ;Lx@ zxs!85hWDxPm#8K!6Paf*QZ-)G`2`~JGv%ssk&kec#VOKm`BX?)MbgvdEI;Nfqm{q* zD7@`-Mu{%0mUH>|!H{Ye_xuk?)w9_Q)uOsoenH&_V<`JarmS39?gjO9`7vNkN)tQB z*o~EVng{}Ah2A<`lle~Nq3ln`_K%&eFMa3JP(@^NfxZI*Rxs7SU;y89TnQaF>U#+d z8uh(|hK>4OLT8NnUP2>AeJ`ONqrR6=pkRNyxSwm^MfJlJhj7b!ZpYnaxV!%Detomw n;NL5DPng{k20p?v0J8cuBOEE>0TT}xPTvh6cuMXr`@;VL1u~FH diff --git a/boettcher.py b/boettcher.py deleted file mode 100644 index 6cfdfe4..0000000 --- a/boettcher.py +++ /dev/null @@ -1,84 +0,0 @@ -from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import sys - -class WebseitenSucheApp(QWidget): - def __init__(self): - super().__init__() - - self.initUI() - - def initUI(self): - # GUI-Elemente erstellen - self.exit_button = QPushButton('Beenden', self) - - # Layout erstellen - vbox = QVBoxLayout() - vbox.addWidget(self.exit_button) - - # Verbinden Sie den Exit-Button mit der Funktion - self.exit_button.clicked.connect(QApplication.quit) - - # Setzen Sie das Layout - self.setLayout(vbox) - - # Fenster Eigenschaften setzen - self.setWindowTitle('Webseiten Suchapp') - self.setGeometry(300, 300, 300, 150) - -def suche_auf_boettcher(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.bueromarkt-ag.de/' # Bitte die tatsächliche URL einsetzen - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "autocomplete-0-input"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "autocomplete-0-input") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten (falls notwendig) - search_box.send_keys(Keys.RETURN) - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - #input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - app = QApplication(sys.argv) - window = WebseitenSucheApp() - window.show() - - # Benutzereingabe - suchbegriff_boettcher = input("Nach welchen Produkten suchen Sie auf boettcher.de? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_boettcher(suchbegriff_boettcher) - - sys.exit(app.exec_()) diff --git a/brewes.py b/brewes.py deleted file mode 100644 index 53b13bd..0000000 --- a/brewes.py +++ /dev/null @@ -1,53 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_brewes(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.brewes.de/catalogsearch/result?q=' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "search"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "search") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - search_box.send_keys(Keys.RETURN) - - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_brewes = input("Nach welchem Produkt suchen Sie auf Brewes? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_brewes(suchbegriff_brewes) diff --git a/bueroshop.py b/bueroshop.py deleted file mode 100644 index a1e7720..0000000 --- a/bueroshop.py +++ /dev/null @@ -1,53 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_bueroshop24(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.bueroshop24.de/' # Bitte die tatsächliche URL einsetzen - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "searchTerm"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "searchTerm") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten (falls notwendig) - search_box.send_keys(Keys.RETURN) - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_bueroshop24 = input("Nach welchen Produkten suchen Sie auf bueroshop24.de? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_bueroshop24(suchbegriff_bueroshop24) diff --git a/conrad.py b/conrad.py deleted file mode 100644 index 46f86ac..0000000 --- a/conrad.py +++ /dev/null @@ -1,55 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup - -def suche_auf_conrad(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # Such-URL generieren - search_url = f'https://www.conrad.de/search.html?search={suchbegriff}' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "header-search"))) - - # Suchbegriff eingeben - search_box = driver.find_element(By.ID, "header-search") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken - search_box.send_keys(Keys.RETURN) - - # Auf das Laden der Suchergebnisse warten (falls erforderlich) - # Hier könnte man zum Beispiel warten, bis ein bestimmtes Element auf der Ergebnisseite erscheint. - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-name')] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Endlosschleife, um den Browser offen zu halten - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_conrad = input("Welchen Artikel suchst du bei Conrad? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_conrad(suchbegriff_conrad) diff --git a/contorion.py b/contorion.py deleted file mode 100644 index 7df9fad..0000000 --- a/contorion.py +++ /dev/null @@ -1,55 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup - -def suche_auf_contorion(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # Such-URL generieren - search_url = f'https://www.contorion.de/suche?q={suchbegriff}' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "search-input"))) - - # Suchbegriff eingeben - search_box = driver.find_element(By.ID, "search-input") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken - search_box.send_keys(Keys.RETURN) - - # Auf das Laden der Suchergebnisse warten (falls erforderlich) - # Hier könnte man zum Beispiel warten, bis ein bestimmtes Element auf der Ergebnisseite erscheint. - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='c-product-tile__title')] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Endlosschleife, um den Browser offen zu halten - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_contorion = input("Welchen Artikel suchst du bei Contorion? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_contorion(suchbegriff_contorion) diff --git a/delker.py b/delker.py deleted file mode 100644 index e2e9d9b..0000000 --- a/delker.py +++ /dev/null @@ -1,55 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_delker(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.delker2business.com/nw2017/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "query"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.NAME, "query") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten - search_box.send_keys(Keys.RETURN) - - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_delker = input("Nach welchem Produkt suchen Sie auf Delker? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_delker(suchbegriff_delker) diff --git a/einkauf_suche.py b/einkauf_suche.py new file mode 100644 index 0000000..fa4dd94 --- /dev/null +++ b/einkauf_suche.py @@ -0,0 +1,597 @@ +from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QCheckBox, QMessageBox +from concurrent.futures import ThreadPoolExecutor +from PyQt5.QtCore import Qt, QThread, pyqtSignal +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from bs4 import BeautifulSoup +import sys + +class SearchThread(QThread): + search_finished = pyqtSignal() + + def __init__(self, selected_webpages, search_term, parent=None): + super(SearchThread, self).__init__(parent) + self.selected_webpages = selected_webpages + self.search_term = search_term + self.error_message = None + + def run(self): + try: + + + with ThreadPoolExecutor() as executor: + futures = [] + + + + for webseite in self.selected_webpages: + # Fügen hier andere Suchfunktionen hinzu + # WebDriver initialisieren + self.driver = webdriver.Edge() + + if webseite == "Reichelt": + futures.append(executor.submit(self.suche_auf_reichelt)) + elif webseite == "Conrad": + futures.append(executor.submit(self.suche_auf_conrad)) + elif webseite == "Kosatec": + futures.append(executor.submit(self.suche_auf_kosatec)) + elif webseite == "Hornbach": + futures.append(executor.submit(self.suche_auf_hornbach)) + elif webseite =="Contorion": + futures.append(executor.submit(self.suche_auf_contorion)) + elif webseite == "Gastro Teile Shop": + futures.append(executor.submit(self.suche_auf_gastroteileshop)) + elif webseite == "TiroLED": + futures.append(executor.submit(self.suche_auf_tiroled)) + elif webseite == "Megabad": + futures.append(executor.submit(self.suche_auf_megabad)) + elif webseite == "IPS": + futures.append(executor.submit(self.suche_auf_ips_shop, )) + elif webseite == "Brewes": + futures.append(executor.submit(self.suche_auf_brewes)) + elif webseite == "Delker": + futures.appen(executor.submit(self.suche_auf_delker)) + elif webseite == "Knauss": + futures.append(executor.submit(self.suche_auf_knauss)) + elif webseite == "Schildershop24": + futures.append(executor.submit(self.suche_auf_schildershop24)) + elif webseite == "Häfele": + futures.append(executor.submit(self.suche_auf_haefele)) + elif webseite == "Esmeyer": + futures.append(executor.submit(self.suche_auf_esmeyer)) + elif webseite == "Papstar": + futures.append(executor.submit(self.suche_auf_papstar)) + elif webseite == "Lusini": + futures.append(executor.submit(self.suche_auf_lusini)) + elif webseite == "Hygi": + futures.append(executor.submit(self.suche_auf_hygi)) + elif webseite == "Schafferer": + futures.append(executor.submit(self.suche_auf_schafferer)) + elif webseite == "Gastronomie Kaufhaus": + futures.append(executor.submit(self.suche_auf_gastronomie_kaufhaus)) + elif webseite == "Böttcher": + futures.append(executor.submit(self.suche_auf_boettcher)) + elif webseite == "Büroshop24": + futures.append(executor.submit(self.suche_auf_bueroshop24)) + + for future in futures: + future.result() # Warte auf das Ende der Suche + + self.search_finished.emit() + except Exception as e: + self.error_message = f"Fehler bei der Suche: {e}" + + + + + def suche_auf_haefele(self): + # URL für die Suche generieren + search_url = 'https://www.haefele.de/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "inputSearchTerm"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "inputSearchTerm") + search_box.clear() + search_box.send_keys(self.search_term) + search_box.send_keys(Keys.RETURN) + + def suche_auf_brewes(self): + + # URL für die Suche generieren + search_url = 'https://www.brewes.de/catalogsearch/result?q=' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "search"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "search") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + search_box.send_keys(Keys.RETURN) + + def suche_auf_conrad(self): + # WebDriver initialisieren + + + # Such-URL generieren + search_url = f'https://www.conrad.de/search.html?search={self.search_term}' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "header-search"))) + + # Suchbegriff eingeben + search_box = self.driver.find_element(By.ID, "header-search") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken + search_box.send_keys(Keys.RETURN) + + def suche_auf_contorion(self): + # Such-URL generieren + search_url = f'https://www.contorion.de/suche?q={self.search_term}' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "search-input"))) + + # Suchbegriff eingeben + search_box = self.driver.find_element(By.ID, "search-input") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken + search_box.send_keys(Keys.RETURN) + + def suche_auf_reichelt(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + + # Such-URL generieren + search_url = f'https://www.reichelt.de/index.html?ACTION=446&LA=446&nbc=1&SEARCH={self.search_term}' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 60).until(EC.presence_of_element_located((By.ID, "searchbutton"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "quicksearch_new") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Formular abschicken + search_button = self.driver.find_element(By.ID, "searchbutton") + search_button.click() + + def suche_auf_kosatec(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # Such-URL generieren + search_url = f'https://www.kosatec.de/suche?query={self.search_term}' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[name='search']"))) + + # Suchbegriff eingeben + search_box = self.driver.find_element(By.CSS_SELECTOR, "input[name='search']") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken + search_box.send_keys(Keys.RETURN) + + def suche_auf_hornbach(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.hornbach.de/s/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, "global_search"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.NAME, "global_search") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + search_box.send_keys(Keys.RETURN) + + def suche_auf_gastroteileshop(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = f'https://www.gastroteileshop.de/?s={self.search_term}' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + + # Warten, bis das Suchfeld sichtbar ist + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "search-input"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.CLASS_NAME, "search-input") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + search_box.send_keys(Keys.RETURN) + + def suche_auf_tiroled(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.tiroled.de/de/search' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, "search"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.NAME, "search") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + search_box.send_keys(Keys.RETURN) + + def suche_auf_megabad(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.megabad.com/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "search-bar-input"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "search-bar-input") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + search_box.send_keys(Keys.RETURN) + + def suche_auf_ips_shop(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.ips-kts.com/de/suche?query=' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, "query"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.NAME, "query") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + search_box.send_keys(Keys.RETURN) + + def suche_auf_delker(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.delker2business.com/nw2017/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, "query"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.NAME, "query") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten + search_box.send_keys(Keys.RETURN) + + def suche_auf_knauss(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.knauss.info/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, "sSearch"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.NAME, "sSearch") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten + search_box.send_keys(Keys.RETURN) + + def suche_auf_schildershop24(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.schildershop24.de/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "search-query-stichwort_neu"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "search-query-stichwort_neu") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten + search_box.send_keys(Keys.RETURN) + + def suche_auf_esmeyer(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.esmeyer-shop.de/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, "search"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.NAME, "search") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten + search_box.send_keys(Keys.RETURN) + + def suche_auf_papstar(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.papstar-shop.de/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "search"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "search") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten + search_box.send_keys(Keys.RETURN) + + def suche_auf_lusini(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.lusini.de/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "search-input"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "search-input") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten + search_box.send_keys(Keys.RETURN) + + def suche_auf_hygi(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.hygi.de/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "qbox"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "qbox") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten + search_box.send_keys(Keys.RETURN) + + def suche_auf_schafferer(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.schafferer.de/gastro/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "quicksearch-input"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "quicksearch-input") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten + search_box.send_keys(Keys.RETURN) + + def suche_auf_gastronomie_kaufhaus(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.gastronomie-kaufhaus.de/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "searchParam"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "searchParam") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten (falls notwendig) + search_box.send_keys(Keys.RETURN) + + def suche_auf_boettcher(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.bueromarkt-ag.de/' # Bitte die tatsächliche URL einsetzen + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "autocomplete-0-input"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "autocomplete-0-input") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten (falls notwendig) + search_box.send_keys(Keys.RETURN) + + def suche_auf_bueroshop24(self): + # WebDriver initialisieren + self.driver = webdriver.Edge() + + # URL für die Suche generieren + search_url = 'https://www.bueroshop24.de/' + + # Webseite aufrufen und auf das vollständige Laden warten + self.driver.get(search_url) + WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "searchTerm"))) + + # Suchbegriff eingeben und Suche starten + search_box = self.driver.find_element(By.ID, "searchTerm") + search_box.clear() # Falls vorheriger Text vorhanden ist + search_box.send_keys(self.search_term) + + # Enter-Taste drücken, um die Suche zu starten (falls notwendig) + search_box.send_keys(Keys.RETURN) + +class WebseitenSucheApp(QWidget): + def __init__(self): + super().__init__() + + self.selected_webpages = { + "Reichelt": False, + "Conrad": False, + "Kosatec": False, + "Hornbach": False, + "Contorion": False, + "Gastro Teile Shop": False, + "TiroLED": False, + "Megabad": False, + "IPS": False, + "Brewes": False, + "Delker": False, + "Knauss": False, + "Schildershop24": False, + "Häfele": False, + "Esmeyer": False, + "Papstar": False, + "Lusini": False, + "Hygi": False, + "Schafferer": False, + "Gastronomie Kaufhaus": False, + "Böttcher": False, + "Büroshop24": False + } + + self.search_term = "" + self.driver = None + + self.init_ui() + + def init_ui(self): + layout = QVBoxLayout() + + # Webseiten-Auswahl + layout.addWidget(QLabel("Wählen Sie die Webseiten aus:")) + for webpage, checked in self.selected_webpages.items(): + checkbox = QCheckBox(webpage) + checkbox.setChecked(checked) + checkbox.stateChanged.connect(lambda state, page=webpage: self.update_webpage_state(page, state)) + layout.addWidget(checkbox) + + # Suchbegriff-Eingabe + search_label = QLabel("Geben Sie den Suchbegriff ein:") + layout.addWidget(search_label) + + search_input = QLineEdit(self) + search_input.textChanged.connect(self.update_search_term) + layout.addWidget(search_input) + + # Suchen-Button + search_button = QPushButton("Suche starten", self) + search_button.clicked.connect(self.start_search) + layout.addWidget(search_button) + + # Neues Suche-Button + new_search_button = QPushButton("Neue Suche starten", self) + new_search_button.clicked.connect(self.new_search) + layout.addWidget(new_search_button) + + self.setLayout(layout) + self.setGeometry(300, 300, 400, 200) + self.setWindowTitle('Webseiten Suche App') + self.show() + + def update_webpage_state(self, webpage, state): + self.selected_webpages[webpage] = state == 2 # 2 entspricht dem Zustand "ausgewählt" + + def update_search_term(self, text): + self.search_term = text + + def start_search(self): + selected_webpages = [webpage for webpage, selected in self.selected_webpages.items() if selected] + + if not selected_webpages: + QMessageBox.warning(self, "Fehler", "Bitte wählen Sie mindestens eine Webseite aus.") + return + + if not self.search_term: + QMessageBox.warning(self, "Fehler", "Bitte geben Sie einen Suchbegriff ein.") + return + + # Starte den Such-Thread + self.search_thread = SearchThread(selected_webpages, self.search_term) + self.search_thread.search_finished.connect(self.search_finished) + self.search_thread.start() + + def search_finished(self): + self.search_thread.quit() + self.search_thread.wait() + if hasattr(self.search_thread, 'error_message') and self.search_thread.error_message: + QMessageBox.critical(None, "Fehler", self.search_thread.error_message) + else: + QMessageBox.information(None, "Suche abgeschlossen", "Die Suche wurde erfolgreich abgeschlossen.") + + + + def new_search(self): + self.close_driver() + print("Neue Suche starten") + +if __name__ == '__main__': + app = QApplication(sys.argv) + window = WebseitenSucheApp() + sys.exit(app.exec_()) diff --git a/esmeyer.py b/esmeyer.py deleted file mode 100644 index 2d86b08..0000000 --- a/esmeyer.py +++ /dev/null @@ -1,54 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_esmeyer(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.esmeyer-shop.de/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "search"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.NAME, "search") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten - search_box.send_keys(Keys.RETURN) - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_essmeyer = input("Nach welchen Produkten suchen Sie auf Esmeyer? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_essmeyer(suchbegriff_essmeyer) diff --git a/gastrokaufhaus.py b/gastrokaufhaus.py deleted file mode 100644 index 4893a9d..0000000 --- a/gastrokaufhaus.py +++ /dev/null @@ -1,53 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_gastronomie_kaufhaus(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.gastronomie-kaufhaus.de/' # Bitte die tatsächliche URL einsetzen - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "searchParam"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "searchParam") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten (falls notwendig) - search_box.send_keys(Keys.RETURN) - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_gastronomie_kaufhaus = input("Nach welchen Produkten suchen Sie auf gastronomie-kaufhaus.de? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_gastronomie_kaufhaus(suchbegriff_gastronomie_kaufhaus) diff --git a/gastroteileshop.py b/gastroteileshop.py deleted file mode 100644 index 6d9d4d0..0000000 --- a/gastroteileshop.py +++ /dev/null @@ -1,59 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import atexit - -def cleanup(driver): - print("Das Programm wird beendet. Der WebDriver wird geschlossen.") - driver.quit() - -def suche_auf_gastroteileshop(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # Registrieren der Cleanup-Funktion - atexit.register(cleanup, driver) - - # URL für die Suche generieren - search_url = f'https://www.gastroteileshop.de/?s={suchbegriff}' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - - # Warten, bis das Suchfeld sichtbar ist - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "search-input"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.CLASS_NAME, "search-input") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - search_box.send_keys(Keys.RETURN) - - # Auf das Laden der Suchergebnisse warten (falls erforderlich) - # Hier könnte man zum Beispiel warten, bis ein bestimmtes Element auf der Ergebnisseite erscheint. - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links[:anzahl_ergebnisse]: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Endlosschleife, um den Browser offen zu halten - input("Enter zum schließen des fensters") -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_gastroteileshop = input("Welchen Artikel suchst du beim Gastroteileshop? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_gastroteileshop(suchbegriff_gastroteileshop) diff --git a/haefele.py b/haefele.py deleted file mode 100644 index d90ec7c..0000000 --- a/haefele.py +++ /dev/null @@ -1,55 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_haefele(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.haefele.de/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "inputSearchTerm"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "inputSearchTerm") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten - search_box.send_keys(Keys.RETURN) - - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_haefele = input("Nach welchen Produkten suchen Sie auf Häfele? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_haefele(suchbegriff_haefele) diff --git a/hornbach.py b/hornbach.py deleted file mode 100644 index d4c0fb9..0000000 --- a/hornbach.py +++ /dev/null @@ -1,53 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_hornbach(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.hornbach.de/s/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "global_search"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.NAME, "global_search") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - search_box.send_keys(Keys.RETURN) - - # Auf das Laden der Suchergebnisse warten - #WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".search-result-item"))) - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='articlelink')] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_hornbach = input("Welchen Artikel suchst du bei Hornbach? ") - - # Suche nach dem Artikel und erhalte gefundene Links - gefundene_links_hornbach = suche_auf_hornbach(suchbegriff_hornbach) diff --git a/hygi.py b/hygi.py deleted file mode 100644 index fd17a16..0000000 --- a/hygi.py +++ /dev/null @@ -1,53 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_hygi(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.hygi.de/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "qbox"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "qbox") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten - search_box.send_keys(Keys.RETURN) - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_hygi = input("Nach welchen Produkten suchen Sie auf Hygi.de? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_hygi(suchbegriff_hygi) diff --git a/ips.py b/ips.py deleted file mode 100644 index a6ae00d..0000000 --- a/ips.py +++ /dev/null @@ -1,53 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_ips_shop(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.ips-kts.com/de/suche?query=' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "query"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.NAME, "query") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - search_box.send_keys(Keys.RETURN) - - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_ips_shop = input("Welchen Artikel suchst du bei IPS Shop? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_ips_shop(suchbegriff_ips_shop) diff --git a/knauss.py b/knauss.py deleted file mode 100644 index d112962..0000000 --- a/knauss.py +++ /dev/null @@ -1,55 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_knauss(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.knauss.info/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "sSearch"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.NAME, "sSearch") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten - search_box.send_keys(Keys.RETURN) - - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_knauss = input("Nach welchem Produkt suchen Sie auf Knauss? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_knauss(suchbegriff_knauss) diff --git a/kosatec.py b/kosatec.py deleted file mode 100644 index cefcf04..0000000 --- a/kosatec.py +++ /dev/null @@ -1,55 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup - -def suche_auf_kosatec(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # Such-URL generieren - search_url = f'https://www.kosatec.de/suche?query={suchbegriff}' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[name='search']"))) - - # Suchbegriff eingeben - search_box = driver.find_element(By.CSS_SELECTOR, "input[name='search']") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken - search_box.send_keys(Keys.RETURN) - - # Auf das Laden der Suchergebnisse warten (falls erforderlich) - # Hier könnte man zum Beispiel warten, bis ein bestimmtes Element auf der Ergebnisseite erscheint. - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Endlosschleife, um den Browser offen zu halten - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_kosatec = input("Welchen Artikel suchst du bei Kosatec? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_kosatec(suchbegriff_kosatec) diff --git a/lusini.py b/lusini.py deleted file mode 100644 index b052058..0000000 --- a/lusini.py +++ /dev/null @@ -1,54 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_lusini(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.lusini.de/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "search-input"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "search-input") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten - search_box.send_keys(Keys.RETURN) - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_lusini = input("Nach welchen Produkten suchen Sie auf Lusini? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_lusini(suchbegriff_lusini) diff --git a/main.py b/main.py deleted file mode 100644 index 01a5f3e..0000000 --- a/main.py +++ /dev/null @@ -1,178 +0,0 @@ -import sys -from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QCheckBox, QMessageBox -from concurrent.futures import ThreadPoolExecutor -from hornbach import suche_auf_hornbach -from reichelt import suche_auf_reichelt -from kosatec import suche_auf_kosatec -from conrad import suche_auf_conrad -from contorion import suche_auf_contorion -from gastroteileshop import suche_auf_gastroteileshop -from tiroled import suche_auf_tiroled -from megabad import suche_auf_megabad -from ips import suche_auf_ips_shop -from brewes import suche_auf_brewes -from delker import suche_auf_delker -from knauss import suche_auf_knauss -from schildershop24 import suche_auf_schildershop24 -from haefele import suche_auf_haefele -from esmeyer import suche_auf_esmeyer -from papstar import suche_auf_papstar -from lusini import suche_auf_lusini -from hygi import suche_auf_hygi -from schafferer import suche_auf_schafferer -from gastrokaufhaus import suche_auf_gastronomie_kaufhaus -from boettcher import suche_auf_boettcher -from bueroshop import suche_auf_bueroshop24 - -class WebseitenSucheApp(QWidget): - def __init__(self): - super().__init__() - - self.selected_webpages = { - "Reichelt": False, - "Conrad": False, - "Kosatec": False, - "Hornbach": False, - "Contorion": False, - "Gastro Teile Shop": False, - "TiroLED": False, - "Megabad": False, - "IPS": False, - "Brewes": False, - "Delker": False, - "Knauss": False, - "Schildershop24": False, - "Häfele": False, - "Esmeyer": False, - "Papstar": False, - "Lusini": False, - "Hygi": False, - "Schafferer": False, - "Gastronomie Kaufhaus": False, - "Böttcher": False, - "Büroshop24": False - } - - self.search_term = "" - - self.init_ui() - - def init_ui(self): - layout = QVBoxLayout() - - # Webseiten-Auswahl - layout.addWidget(QLabel("Wählen Sie die Webseiten aus:")) - for webpage, checked in self.selected_webpages.items(): - checkbox = QCheckBox(webpage) - checkbox.setChecked(checked) - checkbox.stateChanged.connect(lambda state, page=webpage: self.update_webpage_state(page, state)) - layout.addWidget(checkbox) - - # Suchbegriff-Eingabe - search_label = QLabel("Geben Sie den Suchbegriff ein:") - layout.addWidget(search_label) - - search_input = QLineEdit(self) - search_input.textChanged.connect(self.update_search_term) - layout.addWidget(search_input) - - # Suchen-Button - search_button = QPushButton("Suche starten", self) - search_button.clicked.connect(self.start_search) - layout.addWidget(search_button) - - # Neues Suche-Button - new_search_button = QPushButton("Neue Suche starten", self) - new_search_button.clicked.connect(self.new_search) - layout.addWidget(new_search_button) - - self.setLayout(layout) - self.setGeometry(300, 300, 400, 200) - self.setWindowTitle('Webseiten Suche App') - self.show() - - def update_webpage_state(self, webpage, state): - self.selected_webpages[webpage] = state == 2 # 2 entspricht dem Zustand "ausgewählt" - - def update_search_term(self, text): - self.search_term = text - - def start_search(self): - selected_webpages = [webpage for webpage, selected in self.selected_webpages.items() if selected] - - if not selected_webpages: - QMessageBox.warning(self, "Fehler", "Bitte wählen Sie mindestens eine Webseite aus.") - return - - if not self.search_term: - QMessageBox.warning(self, "Fehler", "Bitte geben Sie einen Suchbegriff ein.") - return - - try: - with ThreadPoolExecutor() as executor: - futures = [] - - for webseite in selected_webpages: - # Fügen Sie hier Ihre anderen Suchfunktionen hinzu - - if webseite == "Reichelt": - futures.append(executor.submit(suche_auf_reichelt, self.search_term)) - elif webseite == "Conrad": - futures.append(executor.submit(suche_auf_conrad, self.search_term)) - elif webseite == "Kosatec": - futures.append(executor.submit(suche_auf_kosatec, self.search_term)) - elif webseite == "Hornbach": - futures.append(executor.submit(suche_auf_hornbach, self.search_term)) - elif webseite =="Contorion": - futures.append(executor.submit(suche_auf_contorion, self.search_term)) - elif webseite == "Gastro Teile Shop": - futures.append(executor.submit(suche_auf_gastroteileshop, self.search_term)) - elif webseite == "TiroLED": - futures.append(executor.submit(suche_auf_tiroled, self.search_term)) - elif webseite == "Megabad": - futures.append(executor.submit(suche_auf_megabad, self.search_term)) - elif webseite == "IPS": - futures.append(executor.submit(suche_auf_ips_shop, self.search_term)) - elif webseite == "Brewes": - futures.append(executor.submit(suche_auf_brewes, self.search_term)) - elif webseite == "Delker": - futures.appen(executor.submit(suche_auf_delker, self.search_term)) - elif webseite == "Knauss": - futures.append(executor.submit(suche_auf_knauss, self.search_term)) - elif webseite == "Schildershop24": - futures.append(executor.submit(suche_auf_schildershop24, self.search_term)) - elif webseite == "Häfele": - futures.append(executor.submit(suche_auf_haefele, self.search_term)) - elif webseite == "Esmeyer": - futures.append(executor.submit(suche_auf_esmeyer, self.search_term)) - elif webseite == "Papstar": - futures.append(executor.submit(suche_auf_papstar, self.search_term)) - elif webseite == "Lusini": - futures.append(executor.submit(suche_auf_lusini, self.search_term)) - elif webseite == "Hygi": - futures.append(executor.submit(suche_auf_hygi, self.search_term)) - elif webseite == "Schafferer": - futures.append(executor.submit(suche_auf_schafferer, self.search_term)) - elif webseite == "Gastronomie Kaufhaus": - futures.append(executor.submit(suche_auf_gastronomie_kaufhaus, self.search_term)) - elif webseite == "Böttcher": - futures.append(executor.submit(suche_auf_boettcher, self.search_term)) - elif webseite == "Büroshop24": - futures.append(executor.submit(suche_auf_bueroshop24, self.search_term)) - - for future in futures: - future.result() # Warte auf das Ende der Suche - - QMessageBox.information(self, "Suche abgeschlossen", "Die Suche wurde erfolgreich abgeschlossen.") - except Exception as e: - QMessageBox.critical(self, "Fehler", f"Fehler bei der Suche: {e}") - - def new_search(self): - # Implementieren Sie hier die Logik für eine neue Suche - # Das könnte bedeuten, dass Sie die GUI zurücksetzen oder andere Vorbereitungen treffen - print("Neue Suche starten") - -if __name__ == '__main__': - app = QApplication(sys.argv) - window = WebseitenSucheApp() - sys.exit(app.exec_()) diff --git a/megabad.py b/megabad.py deleted file mode 100644 index 1cc2914..0000000 --- a/megabad.py +++ /dev/null @@ -1,53 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_megabad(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.megabad.com/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "search-bar-input"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "search-bar-input") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - search_box.send_keys(Keys.RETURN) - - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_megabad = input("Welchen Artikel suchst du bei Megabad? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_megabad(suchbegriff_megabad) diff --git a/papstar.py b/papstar.py deleted file mode 100644 index 73e1a6b..0000000 --- a/papstar.py +++ /dev/null @@ -1,54 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_papstar(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.papstar-shop.de/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "search"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "search") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten - search_box.send_keys(Keys.RETURN) - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_papstar = input("Nach welchen Produkten suchen Sie auf Papstar? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_papstar(suchbegriff_papstar) diff --git a/reichelt.py b/reichelt.py deleted file mode 100644 index 0e483b2..0000000 --- a/reichelt.py +++ /dev/null @@ -1,58 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup - -def suche_auf_reichelt(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - - # Such-URL generieren - search_url = f'https://www.reichelt.de/index.html?ACTION=446&LA=446&nbc=1&SEARCH={suchbegriff}' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.ID, "searchbutton"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "quicksearch_new") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Formular abschicken - search_button = driver.find_element(By.ID, "searchbutton") - search_button.click() - - # Auf das Laden der Suchergebnisse warten - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='articlelink')] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Endlosschleife, um den Browser offen zu halten - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - - -if __name__ == "__main__": - - # Benutzereingabe - suchbegriff_reichelt = input("Welchen Artikel suchst du bei Reichelt? ") - - # Suche nach dem Artikel und erhalte gefundene Links - gefundene_links_reichelt = suche_auf_reichelt(suchbegriff_reichelt) diff --git a/schafferer.py b/schafferer.py deleted file mode 100644 index 5d48e3d..0000000 --- a/schafferer.py +++ /dev/null @@ -1,53 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_schafferer(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.schafferer.de/gastro/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "quicksearch-input"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "quicksearch-input") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten - search_box.send_keys(Keys.RETURN) - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_schafferer = input("Nach welchen Produkten suchen Sie auf Schafferer.de? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_schafferer(suchbegriff_schafferer) diff --git a/schildershop24.py b/schildershop24.py deleted file mode 100644 index 48305a3..0000000 --- a/schildershop24.py +++ /dev/null @@ -1,54 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_schildershop24(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.schildershop24.de/' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "search-query-stichwort_neu"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.ID, "search-query-stichwort_neu") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken, um die Suche zu starten - search_box.send_keys(Keys.RETURN) - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_schildershop24 = input("Nach welchen Schildern suchen Sie auf Schildershop24? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_schildershop24(suchbegriff_schildershop24) diff --git a/tiroled.py b/tiroled.py deleted file mode 100644 index 446e68c..0000000 --- a/tiroled.py +++ /dev/null @@ -1,53 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup -import time - -def suche_auf_tiroled(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # URL für die Suche generieren - search_url = 'https://www.tiroled.de/de/search' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "search"))) - - # Suchbegriff eingeben und Suche starten - search_box = driver.find_element(By.NAME, "search") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - search_box.send_keys(Keys.RETURN) - - - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')][:anzahl_ergebnisse] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Hier können Sie den Browser offen lassen, damit Sie die Ergebnisse sehen können. - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_tiroled = input("Welchen Artikel suchst du bei Tiroled? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_tiroled(suchbegriff_tiroled) diff --git a/voelkner.py b/voelkner.py deleted file mode 100644 index 7849d31..0000000 --- a/voelkner.py +++ /dev/null @@ -1,59 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from bs4 import BeautifulSoup - -def suche_auf_voelkner(suchbegriff, anzahl_ergebnisse=5): - # WebDriver initialisieren - driver = webdriver.Edge() - - # Such-URL generieren - search_url = f'https://www.voelkner.de/search/search.html?keywords={suchbegriff}' - - # Webseite aufrufen und auf das vollständige Laden warten - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "js_keywords"))) - - # Suchbegriff eingeben - search_box = driver.find_element(By.ID, "js_keywords") - search_box.clear() # Falls vorheriger Text vorhanden ist - search_box.send_keys(suchbegriff) - - # Enter-Taste drücken (optional) - # search_box.send_keys(Keys.RETURN) - - # Suchbutton klicken - search_button = driver.find_element(By.CLASS_NAME, "js_submit_search") - search_button.click() - - # Auf das Laden der Suchergebnisse warten (falls erforderlich) - # Hier könnte man zum Beispiel warten, bis ein bestimmtes Element auf der Ergebnisseite erscheint. - - # HTML-Inhalt der Suchergebnisse abrufen - soup = BeautifulSoup(driver.page_source, 'html.parser') - - # Extrahiere die Links aus den Suchergebnissen - gefundene_links = [a['href'] for a in soup.find_all('a', class_='product-title')] - - # Ausgabe der gefundenen Links - if gefundene_links: - print("Gefundene Links:") - for link in gefundene_links: - print(link) - else: - print("Keine Ergebnisse gefunden.") - - # Endlosschleife, um den Browser offen zu halten - input("Drücken Sie Enter, um den Browser zu schließen...") - - # WebDriver schließen - driver.quit() - -if __name__ == "__main__": - # Benutzereingabe - suchbegriff_voelkner = input("Welchen Artikel suchst du bei Völkner? ") - - # Suche nach dem Artikel und erhalte gefundene Links - suche_auf_voelkner(suchbegriff_voelkner)