Compare commits

...

2 Commits

Author SHA1 Message Date
bd51ecc0bb Die Webseiten wurden farblich markiert um zu sehen auf welchen Webseiten man auf jedenfall bestellen kann und welche nicht.
Außerdem wurde der Driver von Edge auf Chrome gewechselt.
Zudem wurde die suche auf Böttcher angepasst.
2023-11-28 16:27:57 +01:00
acb70ba1e0 Neue Webseite hinzugefügt 2023-11-27 10:58:52 +01:00

View File

@ -1,4 +1,4 @@
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QCheckBox, QMessageBox
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QLineEdit, QPushButton, QCheckBox, QMessageBox
from concurrent.futures import ThreadPoolExecutor
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from selenium import webdriver
@ -7,6 +7,8 @@ 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
@ -20,10 +22,11 @@ class SearchThread(QThread):
self.selected_webpages = selected_webpages
self.search_term = search_term
self.error_message = None
self.driver = webdriver.Edge()
self.driver = webdriver.Chrome()
def run(self):
try:
for webseite in self.selected_webpages:
self.start_search_on_webseite(webseite)
except Exception as e:
@ -48,7 +51,7 @@ class SearchThread(QThread):
self.suche_auf_hornbach()
elif webseite =="Contorion":
self.suche_auf_contorion()
elif webseite == "Gastro Teile Shop":
elif webseite == "Gastroteile Shop":
self.suche_auf_gastroteileshop()
elif webseite == "TiroLED":
self.suche_auf_tiroled()
@ -82,6 +85,10 @@ 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}")
@ -413,19 +420,13 @@ class SearchThread(QThread):
def suche_auf_boettcher(self):
# URL für die Suche generieren
search_url = 'https://www.bueromarkt-ag.de/' # Bitte die tatsächliche URL einsetzen
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")))
# 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):
@ -444,34 +445,56 @@ 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.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.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.search_term = ""
self.driver = None
@ -481,14 +504,25 @@ class WebseitenSucheApp(QWidget):
def init_ui(self):
layout = QVBoxLayout()
# 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)
# Kategorien und Webseiten in vertikalen Spalten
for category, category_webpages in zip(categories, webpages):
category_label = QLabel(category)
layout.addWidget(category_label)
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)
@ -512,6 +546,12 @@ 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"