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 concurrent.futures import ThreadPoolExecutor
from PyQt5.QtCore import Qt, QThread, pyqtSignal from PyQt5.QtCore import Qt, QThread, pyqtSignal
from selenium import webdriver 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.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
import sys import sys
import concurrent.futures import concurrent.futures
@ -22,11 +20,10 @@ class SearchThread(QThread):
self.selected_webpages = selected_webpages self.selected_webpages = selected_webpages
self.search_term = search_term self.search_term = search_term
self.error_message = None self.error_message = None
self.driver = webdriver.Chrome() self.driver = webdriver.Edge()
def run(self): def run(self):
try: try:
for webseite in self.selected_webpages: for webseite in self.selected_webpages:
self.start_search_on_webseite(webseite) self.start_search_on_webseite(webseite)
except Exception as e: except Exception as e:
@ -51,7 +48,7 @@ class SearchThread(QThread):
self.suche_auf_hornbach() self.suche_auf_hornbach()
elif webseite =="Contorion": elif webseite =="Contorion":
self.suche_auf_contorion() self.suche_auf_contorion()
elif webseite == "Gastroteile Shop": elif webseite == "Gastro Teile Shop":
self.suche_auf_gastroteileshop() self.suche_auf_gastroteileshop()
elif webseite == "TiroLED": elif webseite == "TiroLED":
self.suche_auf_tiroled() self.suche_auf_tiroled()
@ -85,10 +82,6 @@ class SearchThread(QThread):
self.suche_auf_boettcher() self.suche_auf_boettcher()
elif webseite == "Büroshop24": elif webseite == "Büroshop24":
self.suche_auf_bueroshop24() 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: except Exception as e:
print(f"Fehler bei der Suche auf {webseite}: {e}") print(f"Fehler bei der Suche auf {webseite}: {e}")
@ -420,13 +413,19 @@ class SearchThread(QThread):
def suche_auf_boettcher(self): def suche_auf_boettcher(self):
# URL für die Suche generieren # 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 # Webseite aufrufen und auf das vollständige Laden warten
self.driver.get(search_url) self.driver.get(search_url)
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "autocomplete-0-input"))) 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): def suche_auf_bueroshop24(self):
@ -445,56 +444,34 @@ class SearchThread(QThread):
# Enter-Taste drücken, um die Suche zu starten (falls notwendig) # Enter-Taste drücken, um die Suche zu starten (falls notwendig)
search_box.send_keys(Keys.RETURN) 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): class WebseitenSucheApp(QWidget):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.category_webpages_mapping = {category: webpages for category, webpages in zip(categories, webpages)} self.selected_webpages = {
"Reichelt": False,
self.selected_webpages = {webpage: False for category_webpages in webpages for webpage in category_webpages} "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.search_term = ""
self.driver = None self.driver = None
@ -504,25 +481,14 @@ class WebseitenSucheApp(QWidget):
def init_ui(self): def init_ui(self):
layout = QVBoxLayout() layout = QVBoxLayout()
# Kategorien und Webseiten in vertikalen Spalten # Webseiten-Auswahl
for category, category_webpages in zip(categories, webpages): layout.addWidget(QLabel("Wählen Sie die Webseiten aus:"))
category_label = QLabel(category) for webpage, checked in self.selected_webpages.items():
layout.addWidget(category_label)
for webpage in category_webpages:
checkbox = QCheckBox(webpage) checkbox = QCheckBox(webpage)
checkbox.setChecked(self.selected_webpages[webpage]) checkbox.setChecked(checked)
checkbox.stateChanged.connect(self.make_checkbox_callback(webpage)) checkbox.stateChanged.connect(lambda state, page=webpage: self.update_webpage_state(page, state))
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) layout.addWidget(checkbox)
# Suchbegriff-Eingabe # Suchbegriff-Eingabe
search_label = QLabel("Geben Sie den Suchbegriff ein:") search_label = QLabel("Geben Sie den Suchbegriff ein:")
layout.addWidget(search_label) layout.addWidget(search_label)
@ -546,12 +512,6 @@ class WebseitenSucheApp(QWidget):
self.setWindowTitle('Webseiten Suche App') self.setWindowTitle('Webseiten Suche App')
self.show() 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): def update_webpage_state(self, webpage, state):
self.selected_webpages[webpage] = state == 2 # 2 entspricht dem Zustand "ausgewählt" self.selected_webpages[webpage] = state == 2 # 2 entspricht dem Zustand "ausgewählt"