From 4e730a31910b62bcaf3100a4c33109fbeaacade3 Mon Sep 17 00:00:00 2001 From: RochoElLocho Date: Thu, 23 Nov 2023 08:33:44 +0100 Subject: [PATCH] Genisis --- .DS_Store | Bin 0 -> 8196 bytes __pycache__/boettcher.cpython-311.pyc | Bin 0 -> 4367 bytes __pycache__/brewes.cpython-311.pyc | Bin 0 -> 2674 bytes __pycache__/bueroshop.cpython-311.pyc | Bin 0 -> 2689 bytes __pycache__/conrad.cpython-311.pyc | Bin 0 -> 2635 bytes __pycache__/contorion.cpython-311.pyc | Bin 0 -> 2651 bytes __pycache__/delker.cpython-311.pyc | Bin 0 -> 2670 bytes __pycache__/esmeyer.cpython-311.pyc | Bin 0 -> 2688 bytes __pycache__/gastrokaufhaus.cpython-311.pyc | Bin 0 -> 2740 bytes __pycache__/gastroteileshop.cpython-311.pyc | Bin 0 -> 3035 bytes __pycache__/haefele.cpython-311.pyc | Bin 0 -> 2674 bytes __pycache__/hornbach.cpython-311.pyc | Bin 0 -> 2663 bytes __pycache__/hygi.cpython-311.pyc | Bin 0 -> 2641 bytes __pycache__/ips.cpython-311.pyc | Bin 0 -> 2667 bytes __pycache__/knauss.cpython-311.pyc | Bin 0 -> 2657 bytes __pycache__/kosatec.cpython-311.pyc | Bin 0 -> 2654 bytes __pycache__/lusini.cpython-311.pyc | Bin 0 -> 2660 bytes __pycache__/megabad.cpython-311.pyc | Bin 0 -> 2663 bytes __pycache__/papstar.cpython-311.pyc | Bin 0 -> 2665 bytes __pycache__/reichelt.cpython-311.pyc | Bin 0 -> 2711 bytes __pycache__/schafferer.cpython-311.pyc | Bin 0 -> 2701 bytes __pycache__/schildershop24.cpython-311.pyc | Bin 0 -> 2724 bytes __pycache__/tiroled.cpython-311.pyc | Bin 0 -> 2661 bytes boettcher.py | 84 +++++++++ brewes.py | 53 ++++++ bueroshop.py | 53 ++++++ conrad.py | 55 ++++++ contorion.py | 55 ++++++ delker.py | 55 ++++++ 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, 1461 insertions(+) create mode 100644 .DS_Store create mode 100644 __pycache__/boettcher.cpython-311.pyc create mode 100644 __pycache__/brewes.cpython-311.pyc create mode 100644 __pycache__/bueroshop.cpython-311.pyc create mode 100644 __pycache__/conrad.cpython-311.pyc create mode 100644 __pycache__/contorion.cpython-311.pyc create mode 100644 __pycache__/delker.cpython-311.pyc create mode 100644 __pycache__/esmeyer.cpython-311.pyc create mode 100644 __pycache__/gastrokaufhaus.cpython-311.pyc create mode 100644 __pycache__/gastroteileshop.cpython-311.pyc create mode 100644 __pycache__/haefele.cpython-311.pyc create mode 100644 __pycache__/hornbach.cpython-311.pyc create mode 100644 __pycache__/hygi.cpython-311.pyc create mode 100644 __pycache__/ips.cpython-311.pyc create mode 100644 __pycache__/knauss.cpython-311.pyc create mode 100644 __pycache__/kosatec.cpython-311.pyc create mode 100644 __pycache__/lusini.cpython-311.pyc create mode 100644 __pycache__/megabad.cpython-311.pyc create mode 100644 __pycache__/papstar.cpython-311.pyc create mode 100644 __pycache__/reichelt.cpython-311.pyc create mode 100644 __pycache__/schafferer.cpython-311.pyc create mode 100644 __pycache__/schildershop24.cpython-311.pyc create mode 100644 __pycache__/tiroled.cpython-311.pyc create mode 100644 boettcher.py create mode 100644 brewes.py create mode 100644 bueroshop.py create mode 100644 conrad.py create mode 100644 contorion.py create mode 100644 delker.py create mode 100644 esmeyer.py create mode 100644 gastrokaufhaus.py create mode 100644 gastroteileshop.py create mode 100644 haefele.py create mode 100644 hornbach.py create mode 100644 hygi.py create mode 100644 ips.py create mode 100644 knauss.py create mode 100644 kosatec.py create mode 100644 lusini.py create mode 100644 main.py create mode 100644 megabad.py create mode 100644 papstar.py create mode 100644 reichelt.py create mode 100644 schafferer.py create mode 100644 schildershop24.py create mode 100644 tiroled.py create mode 100644 voelkner.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b8b4af571b7f98d8590ba3d7eeef6a813af6b59f GIT binary patch literal 8196 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 literal 0 HcmV?d00001 diff --git a/__pycache__/brewes.cpython-311.pyc b/__pycache__/brewes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b722d6eced14e6fd76643928bc2e58f30a021189 GIT binary patch literal 2674 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 literal 0 HcmV?d00001 diff --git a/__pycache__/conrad.cpython-311.pyc b/__pycache__/conrad.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cadc064c3400447b647cb99261dfa020e7e9df6 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/__pycache__/contorion.cpython-311.pyc b/__pycache__/contorion.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c24a0a6000833cb15d5d643f215efc48259be67 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/__pycache__/delker.cpython-311.pyc b/__pycache__/delker.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0059d910bc976619bf3a82cc747a5c9c8edf0a02 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/__pycache__/esmeyer.cpython-311.pyc b/__pycache__/esmeyer.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..feca087528b9a45f5a2fbceaea83e11973ff0437 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/__pycache__/gastrokaufhaus.cpython-311.pyc b/__pycache__/gastrokaufhaus.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10d326bd60a7e5f48b52bf2886a5aedc20d806c0 GIT binary patch literal 2740 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 literal 0 HcmV?d00001 diff --git a/__pycache__/hornbach.cpython-311.pyc b/__pycache__/hornbach.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc2b515ca47458030782995572e51834185a1adf GIT binary patch literal 2663 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 literal 0 HcmV?d00001 diff --git a/__pycache__/ips.cpython-311.pyc b/__pycache__/ips.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8fe5272d194458963b7f6af0dd96fa53d869e473 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/__pycache__/knauss.cpython-311.pyc b/__pycache__/knauss.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48951bda3516d61f7b3caf6c986431672b8beb3c GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/__pycache__/kosatec.cpython-311.pyc b/__pycache__/kosatec.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6d437f77b578c00e58c4f7c9e8117b551967877 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/__pycache__/lusini.cpython-311.pyc b/__pycache__/lusini.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf54962de47bd6a4c79a97c6c2740bbf7ed1b02b GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/__pycache__/megabad.cpython-311.pyc b/__pycache__/megabad.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5c6ce6e05595ccacb27edcf07a4e4f0c31d13ff GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/__pycache__/papstar.cpython-311.pyc b/__pycache__/papstar.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..270b882271f31eb4e3c0de42fb6dbb24e85e6cab GIT binary patch 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@ literal 0 HcmV?d00001 diff --git a/__pycache__/reichelt.cpython-311.pyc b/__pycache__/reichelt.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ccd38a6ce7e7e1eb18635e8102c4a523f2f3ed01 GIT binary patch literal 2711 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 O+;;p3lFZ%Z9Qa>q45%{z literal 0 HcmV?d00001 diff --git a/__pycache__/tiroled.cpython-311.pyc b/__pycache__/tiroled.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5f0d8dbe6214ea29257c9d0e81a08b526fe0f12 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/boettcher.py b/boettcher.py new file mode 100644 index 0000000..6cfdfe4 --- /dev/null +++ b/boettcher.py @@ -0,0 +1,84 @@ +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 new file mode 100644 index 0000000..53b13bd --- /dev/null +++ b/brewes.py @@ -0,0 +1,53 @@ +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 new file mode 100644 index 0000000..a1e7720 --- /dev/null +++ b/bueroshop.py @@ -0,0 +1,53 @@ +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 new file mode 100644 index 0000000..46f86ac --- /dev/null +++ b/conrad.py @@ -0,0 +1,55 @@ +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 new file mode 100644 index 0000000..7df9fad --- /dev/null +++ b/contorion.py @@ -0,0 +1,55 @@ +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 new file mode 100644 index 0000000..e2e9d9b --- /dev/null +++ b/delker.py @@ -0,0 +1,55 @@ +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/esmeyer.py b/esmeyer.py new file mode 100644 index 0000000..2d86b08 --- /dev/null +++ b/esmeyer.py @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..4893a9d --- /dev/null +++ b/gastrokaufhaus.py @@ -0,0 +1,53 @@ +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 new file mode 100644 index 0000000..6d9d4d0 --- /dev/null +++ b/gastroteileshop.py @@ -0,0 +1,59 @@ +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 new file mode 100644 index 0000000..d90ec7c --- /dev/null +++ b/haefele.py @@ -0,0 +1,55 @@ +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 new file mode 100644 index 0000000..d4c0fb9 --- /dev/null +++ b/hornbach.py @@ -0,0 +1,53 @@ +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 new file mode 100644 index 0000000..fd17a16 --- /dev/null +++ b/hygi.py @@ -0,0 +1,53 @@ +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 new file mode 100644 index 0000000..a6ae00d --- /dev/null +++ b/ips.py @@ -0,0 +1,53 @@ +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 new file mode 100644 index 0000000..d112962 --- /dev/null +++ b/knauss.py @@ -0,0 +1,55 @@ +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 new file mode 100644 index 0000000..cefcf04 --- /dev/null +++ b/kosatec.py @@ -0,0 +1,55 @@ +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 new file mode 100644 index 0000000..b052058 --- /dev/null +++ b/lusini.py @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..01a5f3e --- /dev/null +++ b/main.py @@ -0,0 +1,178 @@ +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 new file mode 100644 index 0000000..1cc2914 --- /dev/null +++ b/megabad.py @@ -0,0 +1,53 @@ +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 new file mode 100644 index 0000000..73e1a6b --- /dev/null +++ b/papstar.py @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..0e483b2 --- /dev/null +++ b/reichelt.py @@ -0,0 +1,58 @@ +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 new file mode 100644 index 0000000..5d48e3d --- /dev/null +++ b/schafferer.py @@ -0,0 +1,53 @@ +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 new file mode 100644 index 0000000..48305a3 --- /dev/null +++ b/schildershop24.py @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..446e68c --- /dev/null +++ b/tiroled.py @@ -0,0 +1,53 @@ +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 new file mode 100644 index 0000000..7849d31 --- /dev/null +++ b/voelkner.py @@ -0,0 +1,59 @@ +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)