Reicheltwarenkorb zu Wiki

Um nicht den kompletten Warenkorb von Reichelt per C&P in eine Sammelbestellung übertragen zu müssen hier ein kleines Pythonscript welches den entsprechenden Wikieintrag in der Konsole oder einer Datei ausgibt.

Voraussetzung

Steuerung

Das Script wird über die Variablen im oberen Teil gesteuert.

Variable Funktion
outfile Ausgabedatei, leer für keine Ausgabe in Datei)
profil Kompletter Pfad zu demm Firefoxprofil mit dem der Warenkorb angelegt wurde. Wichtig! Cookies und so.
username Name der in der Sammelbestellung erscheinen soll
quiet Aktiviert/Deaktiviert Konsolenausgabe (True/False)
new Aktiviert/Deaktiviert das Anlegen der Kopfzeile einer Sammelbestellung (True/False)

Benutzung

Script kopieren, Variablen anpassen, ausführen. Der Firefoxbrowser öffnet sich, navigiert automatisch in den Warenkorb und schließt sich automatisch. Je nach den gewählten Einstellungen erfolgt die Ausgabe in die Konsole bzw. in eine Datei.

Code

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
########################################################################
outfile = "/home/foo/bar.txt"
profil = "/home/foo/.mozilla/firefox/foo/"
username = "foo"
quiet = True
new = True
 
########################################################################
 
url = "http://reichelt.de"
 
 
from selenium.webdriver import Firefox # pip install selenium
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from lxml import html
import requests
import codecs
 
"""Profile setzen"""
fp = webdriver.FirefoxProfile(profil)
browser = webdriver.Firefox(fp)
 
"""Warenkorb runterladen und in page_source speichern"""
browser.get(url)
button = browser.find_element_by_id('basketamount')
button.click()
page_source = browser.page_source
browser.close()
 
"""Parsen und Aufräumen"""
tree = html.fromstring(page_source)
 
artno = tree.xpath('//a[@xmlns=""]/text()')
artno = [x for x in artno if not x.startswith('\n')]
 
besch = tree.xpath('//li[@class="al_gall_liste_article_besch"]/text()')
 
anz = tree.xpath('//input[@type="text"]/@value')
while True:
	try:
		anz.remove("")
	except ValueError:
		break
 
epreis = tree.xpath('//span[@itemprop="price"]/text()')
summe = tree.xpath('//li[@class="PriceSum"]/text()')
 
 
"""Liste erstellen"""
def output(quiet,pfad,new):
	if pfad:
		f = codecs.open(pfad, "wb",encoding='utf-8')
		if new:
			f.write('^Wer^Stk^Artikelnummer^Beschreibung^Einzelpreis^Gesamt^Bemerkung^\n')
		for i in range(0,len(artno)):
			f.write('|'+username+'|')
			f.write(anz[i])
			f.write('|')
			f.write(artno[i])
			f.write('|')
			f.write(besch[i])
			f.write('|')
			f.write(epreis[i])
			f.write('|')
			f.write(summe[i])
			f.write('|')
			f.write(' ')
			f.write('|')
			f.write('\n')
		f.close()
	if quiet == False:
		if new:
			print '^Wer^Stück^Artikelnummer^Beschreibung^Einzelpreis^Gesamt^Bemerkung^'
		for i in range(0,len(artno)):
			print '|'+username+'|',
			print anz[i],
			print '|', 
			print artno[i], 
			print '|', 
			print besch[i], 
			print '|', 
			print epreis[i], 
			print '|', 
			print summe[i], 
			print '|', 
			print ' ', 
			print '|', 
			print '\n', 
 
output(quiet,outfile,new)

Bugs

Öffnet sich beim Start von Firefox automatisch ein neuer Tab (durch die Aktualisierung von Plugins z.B. Ghostery) kann es passieren, dass der „Reichelttab“ nicht richtig geöffnet wird. Fenster schließen, noch mal probieren.

Todo

  • Steuerung über Argumente
  • Code aufräumen

Wiki zu Reicheltwarenkorb

Voraussetzung

Steuerung

Das Script nimmt als Argument die URL zur Sammelbestellung hier im Wiki.

Benutzung

Script kopieren und ausführen. Der Firefoxbrowser öffnet sich, navigiert automatisch zur URL die als 1. Argument übergeben wurde (dies sollte ein Sammelbestellung im Wiki sein!) Danach navigiert der Browser automatisch zu Reichelt und legt alle Artikel in den Warenkorb

!Wichtig!

Das Script funktioniert nur wenn eine Tabelle für die Sammelbestellung verwendet wurde. Die Tabelle muss so aufgebaut sein:

1 Spalte Stück Artikelnummer Beliebig viele weitere Spalten

Vergl. z.B. reichelt_20150114

Code

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
 
from selenium.webdriver import Firefox # pip install selenium
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from lxml import html
from os import sys
 
url="https://www.reichelt.de/"
wiki=sys.argv[1]
 
browser = webdriver.Firefox()
 
"""Wiki Seite öffnen, Tabelle parsen"""
browser.get(wiki)
page_source = browser.page_source
 
tree = html.fromstring(page_source)
artno = tree.xpath('//td[@class="col2 leftalign"]/text()')
artno = [x.strip() for x in artno]
 
menge = tree.xpath('//td[@class="col1 leftalign"]/text()') 
menge = [x.strip() for x in menge]
 
"""Reichelt Warenkorb öffnen, Eingabe finden"""
browser.get(url)
button = browser.find_element_by_id('basketamount')
button.click()
 
field_artnr = browser.find_element_by_id("DirectInput_1")
field_menge = browser.find_element_by_id("DirectInput_1_count")
 
 
 
for i in range(0,len(artno)):
	field_artnr.send_keys(''.join(artno[i]))
	field_menge.send_keys(''.join(menge[i]),Keys.ENTER)
	field_artnr = browser.find_element_by_id("DirectInput_1")
	field_menge = browser.find_element_by_id("DirectInput_1_count")
 
 
projekte/diverses/reichelt2wiki.txt · Zuletzt geändert: 2015-01-19 19:16 von Fabian
Recent changes RSS feed Valid XHTML 1.0 Valid CSS Driven by DokuWiki