diff --git a/einkauf_suche.py b/einkauf_suche.py index b6f3141..32c9bb9 100644 --- a/einkauf_suche.py +++ b/einkauf_suche.py @@ -1,4 +1,4 @@ -from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QLineEdit, QPushButton, QCheckBox, QMessageBox +from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QLineEdit, QPushButton, QCheckBox, QMessageBox, QGridLayout from concurrent.futures import ThreadPoolExecutor from PyQt5.QtCore import Qt, QThread, pyqtSignal from selenium import webdriver @@ -41,51 +41,51 @@ class SearchThread(QThread): self.driver.switch_to.window(self.driver.window_handles[-1]) - if webseite == "Reichelt": + if webseite == "Reichelt: Technikbedarf": self.suche_auf_reichelt() - elif webseite == "Conrad": + elif webseite == "Conrad: Technik Marktplatz": self.suche_auf_conrad() - elif webseite == "Kosatec": + elif webseite == "Kosatec: Elektro Artikel": self.suche_auf_kosatec() - elif webseite == "Hornbach": + elif webseite == "Hornbach: Bad, Baustoffe, Holz, Fenster & Türen, Bodenbeläge, Werkzeug, Farben & Tapeten, Garten, Heizen": self.suche_auf_hornbach() - elif webseite =="Contorion": + elif webseite =="Contorion: Befestigungstechnik, Handwerkzeug, Elektrowerkzeug, Materialbearbeitung, Betriebsausstattung": self.suche_auf_contorion() - elif webseite == "Gastroteile Shop": + elif webseite == "Gastroteile Shop: Geräte/Anwendung, Dichtungs- Elektro- Gas- Wasser-Komponenten, Werkzeuge": self.suche_auf_gastroteileshop() - elif webseite == "TiroLED": + elif webseite == "TiroLED: LED Beleuchtung, Digital Signage": self.suche_auf_tiroled() - elif webseite == "Megabad": + elif webseite == "Megabad: Badarmaturen, Badkeramik, Badmöbel, Badewannen, Duschwannen, Duschkabine, Badheizkörper": self.suche_auf_megabad() - elif webseite == "IPS": + elif webseite == "IPS: Verbindungs- Befestigungs- Dichtungs- Schlauch-Technik, Gewindefittings, Klemmringverschraubungen, Rohre": self.suche_auf_ips_shop() - elif webseite == "Brewes": + elif webseite == "Brewes: Sicherheitsschilder, Verkehrszeichen, Absperrketten, Prüfplaketten, Lagerkennzeichnung": self.suche_auf_brewes() - elif webseite == "Delker": + elif webseite == "Delker: Baugeräte,Beschlagsysteme und Sicherheitstechnik,Elektro- & Druckluftwerkzeuge,Betriebseinrichtungen": self.suche_auf_delker() - elif webseite == "Knauss": + elif webseite == "Knauss: Armaturen, Geschirrbrausen, Reinigung, Haushalt, Wellness, Garten": self.suche_auf_knauss() - elif webseite == "Schildershop24": + elif webseite == "Schildershop24: Beschilderung, Hauseingang, Firma & Gewerbe, KFZ & Straße": self.suche_auf_schildershop24() - elif webseite == "Häfele": + elif webseite == "Häfele: Griffe & Türdrücker, Möbelbeschläge & Wohnraumlösungen, Türbeschläge, Schiebebeschläge & Rollläden": self.suche_auf_haefele() - elif webseite == "Esmeyer": + elif webseite == "Esmeyer: Besteck & Geschirr, alles für Getränke, gedeckter Tisch, Essen & Trinken": self.suche_auf_esmeyer() - elif webseite == "Papstar": + elif webseite == "Papstar: Bio-Einweggeschirr, Teller & Schalen, Becher & Gläser, Besteck, Fingerfood-Artikel, Servietten": self.suche_auf_papstar() - elif webseite == "Lusini": + elif webseite == "Lusini: Gastrobedarf": self.suche_auf_lusini() - elif webseite == "Hygi": + elif webseite == "Hygi: Reinigungsmittel, Pflegemittel & Waschmittel, Desinfektionsmittel, Besen,Müllsäcke & Haushaltswaren": self.suche_auf_hygi() - elif webseite == "Schafferer": + elif webseite == "Schafferer: MARKEN, ESSEN & TRINKEN, WOHNEN & SCHENKEN, KOCHEN & GENIESSE, LUNCH, KINDER, THEMEN": self.suche_auf_schafferer() - elif webseite == "Gastronomie Kaufhaus": + elif webseite == "Gastronomie Kaufhaus: Gastrobedarf": self.suche_auf_gastronomie_kaufhaus() - elif webseite == "Böttcher": + elif webseite == "Böttcher: Bürobedarf, Papiere, Folien, Etiketten, Druckerpatronen, Büromöbel & Stahlschränke": self.suche_auf_boettcher() - elif webseite == "Büroshop24": + elif webseite == "Büroshop24: Papier, Tinte & Toner, Ordner & Mappen, Schreibwaren, Versand, Schulbedarf, Bürobedarf": self.suche_auf_bueroshop24() - elif webseite == "Buchhandlung am Markt": + elif webseite == "Buchhandlung am Markt: Bücher": self.suche_buchhandlung_am_markt() elif webseite == "Transpak": self.suche_auf_transpak() @@ -113,18 +113,12 @@ class SearchThread(QThread): # URL für die Suche generieren - search_url = 'https://www.brewes.de/catalogsearch/result?q=' + search_url = f'https://www.brewes.de/catalogsearch/result?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"))) - # 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 @@ -426,8 +420,6 @@ class SearchThread(QThread): self.driver.get(search_url) WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "autocomplete-0-input"))) - - def suche_auf_bueroshop24(self): # URL für die Suche generieren @@ -480,11 +472,27 @@ class SearchThread(QThread): categories = ["IT/EDV", "Haustechnik","Küche", "Verwaltung", "Transporte"] webpages = [ - ["Reichelt: Technikbedarf", "Conrad: Technik Marktplatz", "Kosatec: Elektro Artikel"], - ["Hornbach: Bad & Sanitär, Baustoffe, Holz, Fenster & Türen, Bodenbeläge & Fliesen, Eisenwaren, Farben & Tapeten, Garten, Heizen, Klima & Lüftung, Innendeko & Bildershop, Küche, Leuchten & Elektro", - "Contorion", "Gastroteile Shop", "TiroLED", "Megabad", "IPS", "Brewes", "Delker", "Knauss", "Schildershop24", "Häfele"], - ["Esmeyer", "Papstar", "Lusini", "Hygi", "Schafferer", "Gastronomie Kaufhaus"], - ["Böttcher", "Büroshop24", "Buchhandlung am Markt"], + ["Reichelt: Technikbedarf", "Kosatec: Elektro Artikel", "Conrad: Technik Marktplatz"], + ["Hornbach: Bad, Baustoffe, Holz, Fenster & Türen, Bodenbeläge, Werkzeug, Farben & Tapeten, Garten, Heizen", + "Contorion: Befestigungstechnik, Handwerkzeug, Elektrowerkzeug, Materialbearbeitung, Betriebsausstattung", + "Gastroteile Shop: Geräte/Anwendung, Dichtungs- Elektro- Gas- Wasser-Komponenten, Werkzeuge", + "TiroLED: LED Beleuchtung, Digital Signage", + "Megabad: Badarmaturen, Badkeramik, Badmöbel, Badewannen, Duschwannen, Duschkabine, Badheizkörper", + "IPS: Verbindungs- Befestigungs- Dichtungs- Schlauch-Technik, Gewindefittings, Klemmringverschraubungen, Rohre", + "Brewes: Sicherheitsschilder, Verkehrszeichen, Absperrketten, Prüfplaketten, Lagerkennzeichnung", + "Delker: Baugeräte,Beschlagsysteme und Sicherheitstechnik,Elektro- & Druckluftwerkzeuge,Betriebseinrichtungen", + "Knauss: Armaturen, Geschirrbrausen, Reinigung, Haushalt, Wellness, Garten", + "Schildershop24: Beschilderung, Hauseingang, Firma & Gewerbe, KFZ & Straße", + "Häfele: Griffe & Türdrücker, Möbelbeschläge & Wohnraumlösungen, Türbeschläge, Schiebebeschläge & Rollläden"], + ["Esmeyer: Besteck & Geschirr, alles für Getränke, gedeckter Tisch, Essen & Trinken", + "Papstar: Bio-Einweggeschirr, Teller & Schalen, Becher & Gläser, Besteck, Fingerfood-Artikel, Servietten", + "Lusini: Gastrobedarf", + "Hygi: Reinigungsmittel, Pflegemittel & Waschmittel, Desinfektionsmittel, Besen,Müllsäcke & Haushaltswaren ", + "Schafferer: MARKEN, ESSEN & TRINKEN, WOHNEN & SCHENKEN, KOCHEN & GENIESSE, LUNCH, KINDER, THEMEN", + "Gastronomie Kaufhaus: Gastrobedarf"], + ["Böttcher: Bürobedarf, Papiere, Folien, Etiketten, Druckerpatronen, Büromöbel & Stahlschränke", + "Buchhandlung am Markt: Bücher", + "Büroshop24: Papier, Tinte & Toner, Ordner & Mappen, Schreibwaren, Versand, Schulbedarf, Bürobedarf"], ["Transpak"] ] @@ -504,25 +512,95 @@ class WebseitenSucheApp(QWidget): def init_ui(self): layout = QVBoxLayout() - # Kategorien und Webseiten in vertikalen Spalten - for category, category_webpages in zip(categories, webpages): - category_label = QLabel(category) - layout.addWidget(category_label) + # Kategorien und Webseiten in zwei vertikalen Spalten + grid_layout = QGridLayout() - for webpage in category_webpages: - checkbox = QCheckBox(webpage) - checkbox.setChecked(self.selected_webpages[webpage]) - checkbox.stateChanged.connect(self.make_checkbox_callback(webpage)) + # Add category in the first column############################################################# + category = "Haustechnik" + category_label = QLabel(category) + grid_layout.addWidget(category_label, 0, 0, 1, 2) - green_webpages = ["Reichelt","Kosatec","Hornbach","Contorion","Gastroteile Shop","TiroLED","Megabad","Esmeyer","Papstar","Lusini","Hygi","Schafferer","Gastronomie Kaufhaus","Böttcher","Büroshop24","Buchhandlung am Markt","Transpak"] - if any(green_webpage in webpage for green_webpage in green_webpages): - checkbox.setStyleSheet("color: green;") + # Add corresponding webpages in the first column + for row, webpage in enumerate(self.category_webpages_mapping[category]): + checkbox = QCheckBox(webpage) + checkbox.setChecked(self.selected_webpages[webpage]) + checkbox.stateChanged.connect(self.make_checkbox_callback(webpage)) - yellow_webpages = ["Conrad","IPS","Brewes","Delker","Knauss","Schildershop24","Häfele",] - if any(yellow_webpage in webpage for yellow_webpage in yellow_webpages): - checkbox.setStyleSheet("color: yellow;") + green_webpages = ["Hornbach", "Contorion", "Gastroteile Shop", "TiroLED", "Megabad" ] + if any(green_webpage in webpage for green_webpage in green_webpages): + checkbox.setStyleSheet("color: green;") + + yellow_webpages = ["IPS", "Brewes","Delker", "Knauss", "Schildershop24", "Häfele"] + if any(yellow_webpage in webpage for yellow_webpage in yellow_webpages): + checkbox.setStyleSheet("color: yellow;") + + grid_layout.addWidget(checkbox, row + 1, 0, 1, 2) + + category = "Küche" + category_label = QLabel(category) + grid_layout.addWidget(category_label, 12, 0, 1, 2) + + for row, webpage in enumerate(self.category_webpages_mapping[category]): + checkbox = QCheckBox(webpage) + checkbox.setChecked(self.selected_webpages[webpage]) + checkbox.stateChanged.connect(self.make_checkbox_callback(webpage)) + + green_webpages = ["Esmeyer", "Papstar", "Lusini", "Hygi", "Schafferer", "Gastronomie Kaufhaus"] + if any(green_webpage in webpage for green_webpage in green_webpages): + checkbox.setStyleSheet("color: green;") + + yellow_webpages = [] + if any(yellow_webpage in webpage for yellow_webpage in yellow_webpages): + checkbox.setStyleSheet("color: yellow;") + + grid_layout.addWidget(checkbox, row + 13, 0, 1, 2) + + # Add "IT/EDV" category in the second column############################################################# + category = "IT/EDV" + category_label = QLabel(category) + grid_layout.addWidget(category_label, 0, 2, 1, 2) + + # Add corresponding webpages in the second column + for row, webpage in enumerate(self.category_webpages_mapping[category]): + checkbox = QCheckBox(webpage) + checkbox.setChecked(self.selected_webpages[webpage]) + checkbox.stateChanged.connect(self.make_checkbox_callback(webpage)) + + green_webpages = ["Reichelt", "Kosatec" ] + if any(green_webpage in webpage for green_webpage in green_webpages): + checkbox.setStyleSheet("color: green;") + + yellow_webpages = ["Conrad"] + if any(yellow_webpage in webpage for yellow_webpage in yellow_webpages): + checkbox.setStyleSheet("color: yellow;") + + grid_layout.addWidget(checkbox, row+ 1, 2, 1, 2) + + + category = "Verwaltung" + category_label = QLabel(category) + grid_layout.addWidget(category_label, 4, 2, 1, 2) + + # Add corresponding webpages in the second column + for row, webpage in enumerate(self.category_webpages_mapping[category]): + checkbox = QCheckBox(webpage) + checkbox.setChecked(self.selected_webpages[webpage]) + checkbox.stateChanged.connect(self.make_checkbox_callback(webpage)) + + green_webpages = [] + if any(green_webpage in webpage for green_webpage in green_webpages): + checkbox.setStyleSheet("color: green;") + + yellow_webpages = [] + if any(yellow_webpage in webpage for yellow_webpage in yellow_webpages): + checkbox.setStyleSheet("color: yellow;") + + grid_layout.addWidget(checkbox, row+ 5, 2, 1, 2) + + ########################################################################################################################## + + layout.addLayout(grid_layout) - layout.addWidget(checkbox) # Suchbegriff-Eingabe search_label = QLabel("Geben Sie den Suchbegriff ein:") layout.addWidget(search_label)