Compare commits

..

No commits in common. "bd51ecc0bb234a815225814816ca404c7f5ebc7b" and "fd49e049ae9ea88ad4999cff8aadbae540b34706" have entirely different histories.

View File

@ -1,4 +1,4 @@
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QLineEdit, QPushButton, QCheckBox, QMessageBox
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QCheckBox, QMessageBox
from concurrent.futures import ThreadPoolExecutor
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from selenium import webdriver
@ -7,8 +7,6 @@ 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
@ -22,11 +20,10 @@ class SearchThread(QThread):
self.selected_webpages = selected_webpages
self.search_term = search_term
self.error_message = None
self.driver = webdriver.Chrome()
self.driver = webdriver.Edge()
def run(self):
try:
for webseite in self.selected_webpages:
self.start_search_on_webseite(webseite)
except Exception as e:
@ -51,7 +48,7 @@ class SearchThread(QThread):
self.suche_auf_hornbach()
elif webseite =="Contorion":
self.suche_auf_contorion()
elif webseite == "Gastroteile Shop":
elif webseite == "Gastro Teile Shop":
self.suche_auf_gastroteileshop()
elif webseite == "TiroLED":
self.suche_auf_tiroled()
@ -85,10 +82,6 @@ class SearchThread(QThread):
self.suche_auf_boettcher()
elif webseite == "Büroshop24":
self.suche_auf_bueroshop24()
elif webseite == "Buchhandlung am Markt":
self.suche_buchhandlung_am_markt()
elif webseite == "Transpak":
self.suche_auf_transpak()
except Exception as e:
print(f"Fehler bei der Suche auf {webseite}: {e}")
@ -420,13 +413,19 @@ class SearchThread(QThread):
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
search_url = 'https://www.bueromarkt-ag.de/' # Bitte die tatsächliche URL einsetzen
# Webseite aufrufen und auf das vollständige Laden warten
self.driver.get(search_url)
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "autocomplete-0-input")))
# Suchbegriff eingeben und Suche starten
search_box = self.driver.find_element(By.ID, "autocomplete-0-input")
search_box.clear() # Falls vorheriger Text vorhanden ist
search_box.send_keys(self.search_term)
# Enter-Taste drücken, um die Suche zu starten (falls notwendig)
search_box.send_keys(Keys.RETURN)
def suche_auf_bueroshop24(self):
@ -445,56 +444,34 @@ class SearchThread(QThread):
# 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 = 'https://bam-mr.buchkatalog.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, "mobile-search")))
# Suchbegriff eingeben und Suche starten
search_box = self.driver.find_element(By.ID, "mobile-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_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}")
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"],
["Transpak"]
]
class WebseitenSucheApp(QWidget):
def __init__(self):
super().__init__()
self.category_webpages_mapping = {category: webpages for category, webpages in zip(categories, webpages)}
self.selected_webpages = {webpage: False for category_webpages in webpages for webpage in category_webpages}
self.selected_webpages = {
"Reichelt": False,
"Conrad": False,
"Kosatec": False,
"Hornbach": False,
"Contorion": False,
"Gastro Teile Shop": False,
"TiroLED": False,
"Megabad": False,
"IPS": False,
"Brewes": False,
"Delker": False,
"Knauss": False,
"Schildershop24": False,
"Häfele": False,
"Esmeyer": False,
"Papstar": False,
"Lusini": False,
"Hygi": False,
"Schafferer": False,
"Gastronomie Kaufhaus": False,
"Böttcher": False,
"Büroshop24": False
}
self.search_term = ""
self.driver = None
@ -504,25 +481,14 @@ 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)
# 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)
for webpage in category_webpages:
checkbox = QCheckBox(webpage)
checkbox.setChecked(self.selected_webpages[webpage])
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage))
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;")
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;")
layout.addWidget(checkbox)
# Suchbegriff-Eingabe
search_label = QLabel("Geben Sie den Suchbegriff ein:")
layout.addWidget(search_label)
@ -546,12 +512,6 @@ class WebseitenSucheApp(QWidget):
self.setWindowTitle('Webseiten Suche App')
self.show()
def make_checkbox_callback(self, webpage):
def checkbox_callback(state):
self.update_webpage_state(webpage, state)
return checkbox_callback
def update_webpage_state(self, webpage, state):
self.selected_webpages[webpage] = state == 2 # 2 entspricht dem Zustand "ausgewählt"