Compare commits
2 Commits
fd49e049ae
...
bd51ecc0bb
Author | SHA1 | Date | |
---|---|---|---|
bd51ecc0bb | |||
acb70ba1e0 |
124
einkauf_suche.py
124
einkauf_suche.py
@ -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"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user