From fd49e049ae9ea88ad4999cff8aadbae540b34706 Mon Sep 17 00:00:00 2001 From: RochoElLocho Date: Fri, 24 Nov 2023 11:21:52 +0100 Subject: [PATCH] =?UTF-8?q?F=C3=BCr=20jede=20Suche=20wird=20jetzt=20ein=20?= =?UTF-8?q?Tab=20ge=C3=B6ffnet=20anstatt=20f=C3=BCr=20jede=20Suche=20einen?= =?UTF-8?q?=20Browser.=20Dazu=20wird=20der=20Webdriver=20dazu=20gebracht?= =?UTF-8?q?=20ein=20neuen=20Tab=20zu=20=C3=B6ffnen=20und=20die=20Suchanfra?= =?UTF-8?q?ge=20f=C3=BCr=20die=20Webseite=20auf=20den=20neuen=20Tab=20zu?= =?UTF-8?q?=20wechseln.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- einkauf_suche.py | 300 ++++++++++++++++++++--------------------------- 1 file changed, 127 insertions(+), 173 deletions(-) diff --git a/einkauf_suche.py b/einkauf_suche.py index e8eacbe..cc67c54 100644 --- a/einkauf_suche.py +++ b/einkauf_suche.py @@ -10,6 +10,8 @@ from bs4 import BeautifulSoup import sys import concurrent.futures +BLANK_PAGE_URL = "" + class SearchThread(QThread): search_finished = pyqtSignal() @@ -18,156 +20,149 @@ class SearchThread(QThread): self.selected_webpages = selected_webpages self.search_term = search_term self.error_message = None - self.drivers = {} + self.driver = webdriver.Edge() def run(self): - - with ThreadPoolExecutor() as executor: - futures = {executor.submit(self.start_search_on_webseite, webseite): webseite for webseite in self.selected_webpages} - - for future in concurrent.futures.as_completed(futures): - try: - future.result() # Warte auf das Ende der Suche - except Exception as e: - self.error_message = f"Fehler bei der Suche: {e}" + try: + for webseite in self.selected_webpages: + self.start_search_on_webseite(webseite) + except Exception as e: + self.error_message = f"Fehler bei der Suche: {e}" + finally: + self.search_finished.emit() - def initialize_driver(self, webseite): - self.drivers[webseite] = webdriver.Edge() def start_search_on_webseite(self, webseite): try: - self.initialize_driver(webseite) + self.driver.execute_script(f"window.open('{BLANK_PAGE_URL}', '_blank');") + + self.driver.switch_to.window(self.driver.window_handles[-1]) if webseite == "Reichelt": - self.suche_auf_reichelt(webseite) + self.suche_auf_reichelt() elif webseite == "Conrad": - self.suche_auf_conrad(webseite) + self.suche_auf_conrad() elif webseite == "Kosatec": - self.suche_auf_kosatec(webseite) + self.suche_auf_kosatec() elif webseite == "Hornbach": - self.suche_auf_hornbach(webseite) + self.suche_auf_hornbach() elif webseite =="Contorion": - self.suche_auf_contorion(webseite) + self.suche_auf_contorion() elif webseite == "Gastro Teile Shop": - self.suche_auf_gastroteileshop(webseite) + self.suche_auf_gastroteileshop() elif webseite == "TiroLED": - self.suche_auf_tiroled(webseite) + self.suche_auf_tiroled() elif webseite == "Megabad": - self.suche_auf_megabad(webseite) + self.suche_auf_megabad() elif webseite == "IPS": - self.suche_auf_ips_shop(webseite) + self.suche_auf_ips_shop() elif webseite == "Brewes": - self.suche_auf_brewes(webseite) + self.suche_auf_brewes() elif webseite == "Delker": - self.suche_auf_delker(webseite) + self.suche_auf_delker() elif webseite == "Knauss": - self.suche_auf_knauss(webseite) + self.suche_auf_knauss() elif webseite == "Schildershop24": - self.suche_auf_schildershop24(webseite) + self.suche_auf_schildershop24() elif webseite == "Häfele": - self.suche_auf_haefele(webseite) + self.suche_auf_haefele() elif webseite == "Esmeyer": - self.suche_auf_esmeyer(webseite) + self.suche_auf_esmeyer() elif webseite == "Papstar": - self.suche_auf_papstar(webseite) + self.suche_auf_papstar() elif webseite == "Lusini": - self.suche_auf_lusini(webseite) + self.suche_auf_lusini() elif webseite == "Hygi": - self.suche_auf_hygi(webseite) + self.suche_auf_hygi() elif webseite == "Schafferer": - self.suche_auf_schafferer(webseite) + self.suche_auf_schafferer() elif webseite == "Gastronomie Kaufhaus": - self.suche_auf_gastronomie_kaufhaus(webseite) + self.suche_auf_gastronomie_kaufhaus() elif webseite == "Böttcher": - self.suche_auf_boettcher(webseite) + self.suche_auf_boettcher() elif webseite == "Büroshop24": - self.suche_auf_bueroshop24(webseite) + self.suche_auf_bueroshop24() except Exception as e: print(f"Fehler bei der Suche auf {webseite}: {e}") - def suche_auf_haefele(self,webseite): + def suche_auf_haefele(self): - driver = self.drivers[webseite] + # 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"))) + 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 = driver.find_element(By.ID, "inputSearchTerm") + 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, webseite): - driver = self.drivers[webseite] + 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 - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "search"))) + 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 = driver.find_element(By.ID, "search") + 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, webseite): + def suche_auf_conrad(self): # WebDriver initialisieren - driver = self.drivers[webseite] - + # 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 - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "header-search"))) + self.driver.get(search_url) + WebDriverWait(self.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 = 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, webseite): - driver = self.drivers[webseite] + 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 - driver.get(search_url) - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "search-input"))) + self.driver.get(search_url) + WebDriverWait(self.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 = 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] - - + def suche_auf_reichelt(self): # 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 - driver.get(search_url) - WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.ID, "searchbutton"))) + 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 = driver.find_element(By.ID, "quicksearch_new") + 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) @@ -175,315 +170,274 @@ class SearchThread(QThread): search_button = self.driver.find_element(By.ID, "searchbutton") search_button.click() - def suche_auf_kosatec(self, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_kosatec(self): # Such-URL generieren search_url = f'https://www.kosatec.de/suche?query={self.search_term}' # 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']"))) + 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 = driver.find_element(By.CSS_SELECTOR, "input[name='search']") + 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,webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_hornbach(self): # 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"))) + 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 = driver.find_element(By.NAME, "global_search") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_gastroteileshop(self): # 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 - driver.get(search_url) + self.driver.get(search_url) # Warten, bis das Suchfeld sichtbar ist - WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "search-input"))) + WebDriverWait(self.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 = 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] - + def suche_auf_tiroled(self): # 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"))) + 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 = driver.find_element(By.NAME, "search") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] - + def suche_auf_megabad(self): # 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"))) + 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 = driver.find_element(By.ID, "search-bar-input") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_ips_shop(self): # 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"))) + 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 = driver.find_element(By.NAME, "query") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_delker(self): # 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"))) + 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 = driver.find_element(By.NAME, "query") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] - + def suche_auf_knauss(self): # 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"))) + 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 = driver.find_element(By.NAME, "sSearch") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] - + def suche_auf_schildershop24(self): # 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"))) + 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 = driver.find_element(By.ID, "search-query-stichwort_neu") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] - + def suche_auf_esmeyer(self): # 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"))) + 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 = driver.find_element(By.NAME, "search") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] - + def suche_auf_papstar(self): # 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"))) + 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 = driver.find_element(By.ID, "search") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_lusini(self): # 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"))) + 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 = driver.find_element(By.ID, "search-input") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] - + def suche_auf_hygi(self): # 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"))) + 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 = driver.find_element(By.ID, "qbox") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_schafferer(self): # 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"))) + 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 = driver.find_element(By.ID, "quicksearch-input") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_gastronomie_kaufhaus(self): # URL für die Suche generieren search_url = 'https://www.gastronomie-kaufhaus.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, "searchParam"))) + 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 = driver.find_element(By.ID, "searchParam") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_boettcher(self): # 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"))) + 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 = driver.find_element(By.ID, "autocomplete-0-input") + 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, webseite): - # WebDriver initialisieren - driver = self.drivers[webseite] + def suche_auf_bueroshop24(self): # URL für die Suche generieren search_url = 'https://www.bueroshop24.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, "searchTerm"))) + 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 = driver.find_element(By.ID, "searchTerm") + search_box = self.driver.find_element(By.ID, "searchTerm") search_box.clear() # Falls vorheriger Text vorhanden ist search_box.send_keys(self.search_term)