1128 lines
44 KiB
Python
1128 lines
44 KiB
Python
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
|
|
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
|
|
import concurrent.futures
|
|
|
|
BLANK_PAGE_URL = ""
|
|
|
|
class SearchThread(QThread):
|
|
search_finished = pyqtSignal()
|
|
|
|
def __init__(self, selected_webpages, search_term, parent=None):
|
|
super(SearchThread, self).__init__(parent)
|
|
self.selected_webpages = selected_webpages
|
|
self.search_term = search_term
|
|
self.error_message = None
|
|
self.driver = webdriver.Chrome()
|
|
|
|
def run(self):
|
|
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 start_search_on_webseite(self, webseite):
|
|
try:
|
|
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()
|
|
elif webseite == "Conrad":
|
|
self.suche_auf_conrad()
|
|
elif webseite == "Kosatec":
|
|
self.suche_auf_kosatec()
|
|
elif webseite == "Hornbach":
|
|
self.suche_auf_hornbach()
|
|
elif webseite =="Contorion":
|
|
self.suche_auf_contorion()
|
|
elif webseite == "Gastroteile Shop":
|
|
self.suche_auf_gastroteileshop()
|
|
elif webseite == "TiroLED":
|
|
self.suche_auf_tiroled()
|
|
elif webseite == "Megabad":
|
|
self.suche_auf_megabad()
|
|
elif webseite == "Baubeschlagshop":
|
|
self.suche_auf_baubeschlag()
|
|
elif webseite == "IPS":
|
|
self.suche_auf_ips_shop()
|
|
elif webseite == "Brewes":
|
|
self.suche_auf_brewes()
|
|
elif webseite == "Delker":
|
|
self.suche_auf_delker()
|
|
elif webseite == "Knauss":
|
|
self.suche_auf_knauss()
|
|
elif webseite == "Schildershop24":
|
|
self.suche_auf_schildershop24()
|
|
elif webseite == "Häfele":
|
|
self.suche_auf_haefele()
|
|
elif webseite == "Esmeyer":
|
|
self.suche_auf_esmeyer()
|
|
elif webseite == "Papstar":
|
|
self.suche_auf_papstar()
|
|
elif webseite == "Pacovis":
|
|
self.suche_auf_pacovis()
|
|
elif webseite == "Lusini":
|
|
self.suche_auf_lusini()
|
|
elif webseite == "Hygi":
|
|
self.suche_auf_hygi()
|
|
elif webseite == "Tischwelt":
|
|
self.suche_auf_tischwelt()
|
|
elif webseite == "Schafferer":
|
|
self.suche_auf_schafferer()
|
|
elif webseite == "Gastronomie Kaufhaus":
|
|
self.suche_auf_gastronomie_kaufhaus()
|
|
elif webseite == "Arbeitsplatzmatten Profi":
|
|
self.suche_auf_arbeitsplatzmattenprofi()
|
|
elif webseite == "Skiltex":
|
|
self.suche_auf_skiltex()
|
|
elif webseite == "Franz-Mensch":
|
|
self.suche_auf_franzmensch()
|
|
elif webseite == "Frank-Flechtwaren":
|
|
self.suche_auf_frankflechtwaren()
|
|
elif webseite == "ARA":
|
|
self.suche_auf_ara_arbeitsschutz()
|
|
elif webseite == "VKF-Renzel":
|
|
self.suche_auf_vkf_renzel()
|
|
elif webseite == "Börner":
|
|
self.suche_auf_boerner()
|
|
elif webseite == "GGM-Gastro":
|
|
self.suche_auf_ggmgastro()
|
|
elif webseite == "Böttcher":
|
|
self.suche_auf_boettcher()
|
|
elif webseite == "Büroshop24":
|
|
self.suche_auf_bueroshop24()
|
|
elif webseite == "Buchhandlung am Markt":
|
|
self.suche_buchhandlung_am_markt()
|
|
elif webseite == "Label-Ident":
|
|
self.suche_auf_labelident()
|
|
elif webseite == "Transpak":
|
|
self.suche_auf_transpak()
|
|
elif webseite == "PM":
|
|
self.suche_auf_pml()
|
|
elif webseite == "DM-Folien":
|
|
self.suche_auf_dmfolien()
|
|
elif webseite == "Proficleanshop":
|
|
self.suche_auf_proficleanshop()
|
|
elif webseite == "Siepmann":
|
|
self.suche_auf_siepmann()
|
|
elif webseite == "FK-Söhnchen":
|
|
self.suche_auf_fksoehnchen()
|
|
elif webseite == "Wahl-Agar":
|
|
self.suche_auf_wahl_agrar()
|
|
elif webseite == "TVV-Verpackungen":
|
|
self.suche_auf_tvv()
|
|
elif webseite == "Eierschachteln.de":
|
|
self.suche_auf_eierschachteln()
|
|
elif webseite == "KOX":
|
|
self.suche_auf_kox()
|
|
elif webseite == "Reinigungsberater.de":
|
|
self.suche_auf_reinigungsberater()
|
|
elif webseite == "VBS-Hobby":
|
|
self.suche_auf_vbshobby()
|
|
elif webseite == "Ökonomed":
|
|
self.suche_auf_oekonomed()
|
|
elif webseite == "Rossmann":
|
|
self.suche_auf_rossmann()
|
|
elif webseite == "Betzold":
|
|
self.suche_auf_betzold()
|
|
|
|
|
|
except Exception as e:
|
|
print(f"Fehler bei der Suche auf {webseite}: {e}")
|
|
|
|
def suche_auf_haefele(self):
|
|
|
|
|
|
# URL für die Suche generieren
|
|
search_url = 'https://www.haefele.de/'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "inputSearchTerm")))
|
|
|
|
# Suchbegriff eingeben und Suche starten
|
|
search_box = self.driver.find_element(By.ID, "inputSearchTerm")
|
|
search_box.clear()
|
|
search_box.send_keys(self.search_term)
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
def suche_auf_brewes(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.brewes.de/catalogsearch/result?q={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_conrad(self):
|
|
|
|
# Such-URL generieren
|
|
search_url = f'https://www.conrad.de/search.html?search={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
# Suchbegriff eingeben
|
|
search_box = self.driver.find_element(By.ID, "header-search")
|
|
search_box.clear() # Falls vorheriger Text vorhanden ist
|
|
search_box.send_keys(self.search_term)
|
|
|
|
# Enter-Taste drücken
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
def suche_auf_contorion(self):
|
|
|
|
# Such-URL generieren
|
|
search_url = f'https://www.contorion.de/suche?q={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "search-input")))
|
|
|
|
# Suchbegriff eingeben
|
|
search_box = self.driver.find_element(By.ID, "search-input")
|
|
search_box.clear() # Falls vorheriger Text vorhanden ist
|
|
search_box.send_keys(self.search_term)
|
|
|
|
# Enter-Taste drücken
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
def suche_auf_reichelt(self):
|
|
# Such-URL generieren
|
|
search_url = f'https://www.reichelt.de/index.html?ACTION=446&LA=446&nbc=1&SEARCH={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
WebDriverWait(self.driver, 60).until(EC.presence_of_element_located((By.ID, "searchbutton")))
|
|
|
|
# Suchbegriff eingeben und Suche starten
|
|
search_box = self.driver.find_element(By.ID, "quicksearch_new")
|
|
search_box.clear() # Falls vorheriger Text vorhanden ist
|
|
search_box.send_keys(self.search_term)
|
|
|
|
# Formular abschicken
|
|
search_button = self.driver.find_element(By.ID, "searchbutton")
|
|
search_button.click()
|
|
|
|
def suche_auf_kosatec(self):
|
|
|
|
# Such-URL generieren
|
|
search_url = f'https://shop.kosatec.de/search?search={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.ID, "CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_hornbach(self):
|
|
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.hornbach.de/s/{self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
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
|
|
self.driver.get(search_url)
|
|
|
|
# Warten, bis das Suchfeld sichtbar ist
|
|
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "search-input")))
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "btn.btn-primary.btn-block.btn-appearance")
|
|
cookie_button.click()
|
|
|
|
# Suchbegriff eingeben und Suche starten
|
|
search_box = self.driver.find_element(By.CLASS_NAME, "search-input")
|
|
search_box.clear() # Falls vorheriger Text vorhanden ist
|
|
search_box.send_keys(self.search_term)
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
def suche_auf_tiroled(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.tiroled.com/de/search?search={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "cookie-consent-accept-only-functional-button.btn.btn-primary.cookie-consent-button-margin")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_megabad(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.megabad.com/search/?query=sdyc/#/q/{self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.CSS_SELECTOR, ".cmpboxbtn.cmpboxbtnyes.cmptxt_btn_yes")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_baubeschlag(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.baubeschlagshop.de/fts.php?criteria={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_ips_shop(self):
|
|
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.ips-kts.com/de/suche?query={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "btn.btn-primary.btn-red.user-type--business")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_delker(self):
|
|
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.delker2business.com/nwsearch/execute?query={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_knauss(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://knauss.info/dksearch?sSearch={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "cookie-permission--decline-button.btn.is--large.is--center")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_schildershop24(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.schildershop24.de/?action=Query&-query.&query.stichwort=r{self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "btn.btn-primary.button.set-disabled")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_esmeyer(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.esmeyer-shop.de/search?search={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "cookie-permission-button.js-cookie-permission-button")
|
|
cookie_button.click()
|
|
|
|
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
|
|
self.driver.get(search_url)
|
|
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "search")))
|
|
|
|
# Suchbegriff eingeben und Suche starten
|
|
search_box = self.driver.find_element(By.ID, "search")
|
|
search_box.clear() # Falls vorheriger Text vorhanden ist
|
|
search_box.send_keys(self.search_term)
|
|
|
|
# Enter-Taste drücken, um die Suche zu starten
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
def suche_auf_pacovis(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.pacovis.com/de-de/suche/1/search={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_lusini(self):
|
|
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.lusini.com/de-de/search/#q={self.search_term}'
|
|
|
|
# Webseite aufrufen
|
|
self.driver.get(search_url)
|
|
|
|
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
|
|
self.driver.get(search_url)
|
|
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "qbox")))
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "btn.btn-light.text-nowrap.btn-block.mb-2")
|
|
cookie_button.click()
|
|
|
|
# Suchbegriff eingeben und Suche starten
|
|
search_box = self.driver.find_element(By.ID, "qbox")
|
|
search_box.clear() # Falls vorheriger Text vorhanden ist
|
|
search_box.send_keys(self.search_term)
|
|
|
|
# Enter-Taste drücken, um die Suche zu starten
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
def suche_auf_tischwelt(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.tischwelt.de/shop/Suche/?q={self.search_term}&search=Suchen'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_schafferer(self):
|
|
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.schafferer.de/gastro/Artikel-Suche/?q={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
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
|
|
self.driver.get(search_url)
|
|
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "searchParam")))
|
|
|
|
# Suchbegriff eingeben und Suche starten
|
|
search_box = self.driver.find_element(By.ID, "searchParam")
|
|
search_box.clear() # Falls vorheriger Text vorhanden ist
|
|
search_box.send_keys(self.search_term)
|
|
|
|
# Enter-Taste drücken, um die Suche zu starten (falls notwendig)
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
def suche_auf_arbeitsplatzmattenprofi(self):
|
|
|
|
|
|
# URL für die Suche generieren
|
|
search_url = f'https://arbeitsplatzmatten-profi.com/?s={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.ID, "CookieBoxSaveButton")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_skiltex(self):
|
|
|
|
search_url = 'https://www.skiltex.de/shop/frontpage.html' # Ersetzen Sie dies durch die tatsächliche URL für Skiltex
|
|
|
|
# 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.CLASS_NAME, "SearchField_SearchPage")))
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "coi-banner__accept")
|
|
cookie_button.click()
|
|
|
|
# Auf die Suchleiste klicken
|
|
search_box = self.driver.find_element(By.CLASS_NAME, "SearchField_SearchPage")
|
|
search_box.click()
|
|
|
|
# Suchbegriff eingeben und Suche starten
|
|
search_box.clear()
|
|
search_box.send_keys(self.search_term)
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.CLASS_NAME, "popuptype.fancybox-content")))
|
|
kunde = self.driver.find_element(By.CLASS_NAME, "popuptype_knap_erhverv.moms_off")
|
|
kunde.click()
|
|
|
|
def suche_auf_franzmensch(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.franz-mensch.de/search?search={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_frankflechtwaren(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.frank-flechtwaren.de/suchergebnisse/?query={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_ara_arbeitsschutz(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://ara-arbeitsschutz.de/navi.php?qs={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "cmpboxbtn.cmpboxbtnno.cmptxt_btn_no")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_vkf_renzel(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.vkf-renzel.de/index.php?lang=0&cl=rasearch&searchparam={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_boerner(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.boerner.de/?s={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.ID, "CookieBoxSaveButton")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_ggmgastro(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.ggmgastro.com/de-de-eur/search?q={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "cf1y60")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_boettcher(self):
|
|
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.bueromarkt-ag.de/Artikelsuche_{self.search_term}.html' # Bitte die tatsächliche URL einsetzen
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "autocomplete-0-input")))
|
|
|
|
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
|
|
self.driver.get(search_url)
|
|
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "searchTerm")))
|
|
|
|
# Suchbegriff eingeben und Suche starten
|
|
search_box = self.driver.find_element(By.ID, "searchTerm")
|
|
search_box.clear() # Falls vorheriger Text vorhanden ist
|
|
search_box.send_keys(self.search_term)
|
|
|
|
# Enter-Taste drücken, um die Suche zu starten (falls notwendig)
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
def suche_buchhandlung_am_markt(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://bam-mr.buchkatalog.de/search?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, "mobile-search")))
|
|
|
|
def suche_auf_labelident(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.labelident.com/catalogsearch/result/?q={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "cmpboxbtn.cmpboxbtnno.cmptxt_btn_no")
|
|
cookie_button.click()
|
|
kunde = self.driver.find_element(By.CLASS_NAME, "btn.btn-blue-outline.redir-mask")
|
|
kunde.click()
|
|
|
|
def suche_auf_transpak(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.shop.transpak.de/search?sSearch={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.CLASS_NAME, "form-control")))
|
|
try:
|
|
# Warten, bis der Ablehnen-Button sichtbar ist
|
|
cookie_button = WebDriverWait(self.driver, 10).until(
|
|
EC.presence_of_element_located((By.XPATH, "//button[@data-cookiefirst-action='reject']"))
|
|
)
|
|
# Klicken Sie auf den Ablehnen-Button, um Cookies abzulehnen
|
|
cookie_button.click()
|
|
except Exception as e:
|
|
print(f"Fehler beim Akzeptieren von Cookies: {e}")
|
|
|
|
def suche_auf_pml(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.pml-papiere.de/#query={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_dmfolien(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.dm-folien.com/shop/search?sSearch={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_proficleanshop(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.proficleanshop.de/searchresults/?q={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
kunde = self.driver.find_element(By.CLASS_NAME, "buttonTaxConfirm.fsize14.white")
|
|
kunde.click()
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "cf1lHZ.cf2MAH")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_siepmann(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.siepmann.net/siepmann_shop.php?suchfeld={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_fksoehnchen(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.fk-soehnchen.de/index.php?lang=0&cl=search&searchparam={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
|
|
def suche_auf_wahl_agrar(self):
|
|
# URL für die Suche generieren
|
|
search_url = 'https://www.agrar-fachversand.com/de/' # Ersetzen Sie dies durch die tatsächliche URL für Wahl Agrar
|
|
|
|
# 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.CLASS_NAME, "main-search--field")))
|
|
|
|
# Auf die Suchleiste klicken
|
|
search_box = self.driver.find_element(By.CLASS_NAME, "main-search--field")
|
|
search_box.click()
|
|
|
|
# Suchbegriff eingeben und Suche starten
|
|
search_box.clear()
|
|
search_box.send_keys(self.search_term)
|
|
search_box.send_keys(Keys.RETURN)
|
|
|
|
def suche_auf_tvv(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.tvv-verpackungen.de/index.php?jtl_token=86147d041429ad7dafb0c5f1a80e61e089eb4f04ec192b004ba5e69e8aaa45c5&sp_additional_mail=&qs={self.search_term}' # Ersetzen Sie dies durch die tatsächliche URL für DVV
|
|
|
|
# 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-header-mobile-top")))
|
|
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "cmpboxbtn.cmpboxbtnno.cmptxt_btn_no")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_eierschachteln(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.eierschachteln.de/search?sSearch={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
cookie_button = self.driver.find_element(By.ID, "cookie-permission--accept-only-functional-button")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_kox(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.kox-direct.de/?query={self.search_term}&sid=6d0b4366af8bb99af514529b7e61ad&act=search'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "od-btn-white.bg-gray-lightest.w-full.mb-4.set_essential_cookies")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_reinigungsberater(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.reinigungsberater.de/{self.search_term}.html'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "acceptMe")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_vbshobby(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.vbs-hobby.com/suche/?q={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
def suche_auf_oekonomed(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://shop.oekonomed.de/de/advanced_search_result.php?keywords={self.search_term}&inc_subcat=1'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
cookie_button = self.driver.find_element(By.CLASS_NAME, "as-oil-l-item")
|
|
cookie_button.click()
|
|
|
|
def suche_auf_rossmann(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.rossmann.de/de/search/?text={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
|
|
def suche_auf_betzold(self):
|
|
# URL für die Suche generieren
|
|
search_url = f'https://www.betzold.de/search/?q={self.search_term}'
|
|
|
|
# Webseite aufrufen und auf das vollständige Laden warten
|
|
self.driver.get(search_url)
|
|
|
|
|
|
categories = ["IT/Elektronik", "Baumarkt","Schilder","Verpackungen",
|
|
"Küchenbedarf","Reinigungs Artikel", "Büro Artikel",
|
|
"Deko","Landwirtschaft/Garten","Arbeitsschutz","Hygiene",
|
|
"Etiketten/Papier",
|
|
"Drogentest"]
|
|
webpages = [
|
|
["Reichelt", "Kosatec", "Conrad"],
|
|
["Hornbach",
|
|
"Contorion",
|
|
"IPS",
|
|
"Gastroteile Shop",
|
|
"TiroLED",
|
|
"Megabad",
|
|
"Baubeschlagshop",
|
|
"Häfele",
|
|
"Delker",
|
|
"Knauss"],
|
|
["Brewes",
|
|
"Schildershop24",
|
|
"Skiltex",
|
|
"VKF-Renzel"],
|
|
["Papstar",
|
|
"Pacovis",
|
|
"Transpak",
|
|
"TVV-Verpackungen",
|
|
"Eierschachteln.de",
|
|
"DM-Folien"],
|
|
["Esmeyer",
|
|
"Lusini",
|
|
"Tischwelt",
|
|
"Schafferer",
|
|
"Gastronomie Kaufhaus",
|
|
"Börner",
|
|
"GGM-Gastro"],
|
|
["Hygi",
|
|
"Franz-Mensch",
|
|
"Proficlean Shop",
|
|
"Reinigungsberater"],
|
|
["Böttcher",
|
|
"Büroshop24.de",
|
|
"Buchhandlung am Markt"],
|
|
["Frank-Flechtwaren",
|
|
"Betzold",
|
|
"VBS-Hobby"],
|
|
["Siepmann",
|
|
"FK-Söhnchen",
|
|
"Wahl-Agar",
|
|
"KOX"],
|
|
["ARA",
|
|
"Arbeitsplatzmatten Profi"],
|
|
["Rossmann"],
|
|
["PML",
|
|
"Label-Ident"],
|
|
["Ökonomed"]
|
|
]
|
|
|
|
class WebseitenSucheApp(QWidget):
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
self.category_webpages_mapping = {category: webpages for category, webpages in zip(categories, webpages)}
|
|
|
|
self.checkbox_states = {webpage: False for category_webpages in webpages for webpage in category_webpages}
|
|
|
|
self.search_term = ""
|
|
self.driver = None
|
|
|
|
self.init_ui()
|
|
|
|
def init_ui(self):
|
|
self.setStyleSheet("background-color: black; color: white;")
|
|
layout = QVBoxLayout()
|
|
|
|
# Kategorien und Webseiten in zwei vertikalen Spalten
|
|
grid_layout = QGridLayout()
|
|
|
|
# Add category in the first grid#############################################################
|
|
category = "Baumarkt"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 0, 0, 1, 2)
|
|
|
|
# Add corresponding webpages in the first column
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Hornbach", "Contorion", "Gastroteile Shop", "TiroLED", "Megabad", "Baubeschlagshop" ]
|
|
if any(green_webpage in webpage for green_webpage in green_webpages):
|
|
checkbox.setStyleSheet("color: green;")
|
|
|
|
yellow_webpages = ["IPS","Delker", "Knauss", "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 = "Verpackungen"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 8, 0, 1, 2)
|
|
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Papstar", "Pacovis", "Transpak","TVV-Verpackungen","Eierschachteln.de","DM-Folien"]
|
|
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 + 9, 0, 1, 2)
|
|
|
|
category = "Deko"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 15, 0, 1, 2)
|
|
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Frank-Flechtwaren", "Betzold", "VBS-Hobby"]
|
|
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 + 16, 0, 1, 2)
|
|
|
|
|
|
category = "Landwirtschaft/Garten"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 19, 0, 1, 2)
|
|
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Siepmann","FK-Söhnchen","Wahl-Agar","KOX"]
|
|
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 + 20, 0, 1, 2)
|
|
|
|
category = "Arbeitsschutz"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 24, 0, 1, 2)
|
|
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["ARA","Arbeitsplatzmatten Profi"]
|
|
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 + 25, 0, 1, 2)
|
|
|
|
category = "Hygiene"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 27, 0, 1, 2)
|
|
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Rossmann"]
|
|
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 + 28, 0, 1, 2)
|
|
|
|
category = "Drogentest"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 29, 0, 1, 2)
|
|
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Ökonomed"]
|
|
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 + 30, 0, 1, 2)
|
|
|
|
|
|
# Add category in the second grid#############################################################
|
|
category = "IT/Elektronik"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 0, 2, 1, 2)
|
|
|
|
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
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 = "Schilder"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 4, 2, 1, 2)
|
|
|
|
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Brewes", "Schildershop24","Skiltex","VKF-Renzel"]
|
|
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)
|
|
|
|
category = "Küchenbedarf"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 9, 2, 1, 2)
|
|
|
|
|
|
for row, webpage in enumerate(self.category_webpages_mapping[category]):
|
|
checkbox = QCheckBox(webpage)
|
|
checkbox.setChecked(self.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Esmeyer", "Lusini", "Tischwelt", "Schafferer", "Gastronomie Kaufhaus","Börner","GGM-Gastro"]
|
|
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+ 10, 2, 1, 2)
|
|
|
|
|
|
category = "Reinigungs Artikel"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 17, 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.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Proficlean Shop", "Hygi", "Reinigungsberater", "Franz-Mensch"]
|
|
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+ 18, 2, 1, 2)
|
|
|
|
category = "Büro Artikel"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 22, 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.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["Böttcher", "Büroshop24.de", "Buchhandlung am Markt"]
|
|
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+ 23, 2, 1, 2)
|
|
|
|
category = "Etiketten/Papier"
|
|
category_label = QLabel(category)
|
|
grid_layout.addWidget(category_label, 26, 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.checkbox_states[webpage])
|
|
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
|
|
checkbox.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
green_webpages = ["PML","Label-Ident"]
|
|
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+ 27, 2, 1, 2)
|
|
|
|
|
|
##########################################################################################################################
|
|
|
|
layout.addLayout(grid_layout)
|
|
|
|
# Suchbegriff-Eingabe
|
|
self.search_label = QLabel("Geben Sie den Suchbegriff ein:")
|
|
layout.addWidget(self.search_label)
|
|
|
|
self.search_input = QLineEdit(self)
|
|
self.search_input.textChanged.connect(self.update_search_term)
|
|
layout.addWidget(self.search_input)
|
|
self.search_input.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
# Suchen-Button
|
|
search_button = QPushButton("Suche starten", self)
|
|
search_button.clicked.connect(self.start_search)
|
|
layout.addWidget(search_button)
|
|
search_button.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
|
|
# Neues Suche-Button
|
|
new_search_button = QPushButton("Neue Suche starten", self)
|
|
new_search_button.clicked.connect(self.clear_checkboxes)
|
|
layout.addWidget(new_search_button)
|
|
new_search_button.setStyleSheet("color: white; border: 1px solid white;")
|
|
|
|
|
|
self.setLayout(layout)
|
|
self.setGeometry(300, 300, 400, 200)
|
|
self.setWindowTitle('Webseiten Suche App')
|
|
self.show()
|
|
|
|
|
|
def make_checkbox_callback(self, webpage):
|
|
def checkbox_callback(state):
|
|
self.checkbox_states[webpage] = state == Qt.Checked
|
|
return checkbox_callback
|
|
|
|
def update_webpage_state(self, webpage, state):
|
|
self.checkbox_states[webpage] = state
|
|
for checkbox in self.findChildren(QCheckBox):
|
|
if checkbox.text() == webpage:
|
|
checkbox.setChecked(state)
|
|
|
|
def clear_checkboxes(self):
|
|
for webpage in self.checkbox_states:
|
|
self.update_webpage_state(webpage, False)
|
|
self.search_input.clear()
|
|
|
|
def update_search_term(self, text):
|
|
self.search_term = text
|
|
|
|
def start_search(self):
|
|
checkbox_states = [webpage for webpage, selected in self.checkbox_states.items() if selected]
|
|
|
|
if not checkbox_states:
|
|
QMessageBox.warning(self, "Fehler", "Bitte wählen Sie mindestens eine Webseite aus.")
|
|
return
|
|
|
|
if not self.search_term:
|
|
QMessageBox.warning(self, "Fehler", "Bitte geben Sie einen Suchbegriff ein.")
|
|
return
|
|
|
|
# Starte den Such-Thread
|
|
self.search_thread = SearchThread(checkbox_states, self.search_term)
|
|
self.search_thread.search_finished.connect(self.search_finished)
|
|
self.search_thread.start()
|
|
|
|
def search_finished(self):
|
|
self.search_thread.quit()
|
|
self.search_thread.wait()
|
|
if hasattr(self.search_thread, 'error_message') and self.search_thread.error_message:
|
|
QMessageBox.critical(None, "Fehler", self.search_thread.error_message)
|
|
|
|
def keyPressEvent(self, event):
|
|
if event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return:
|
|
self.start_search()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app = QApplication(sys.argv)
|
|
window = WebseitenSucheApp()
|
|
sys.exit(app.exec_())
|