Mailman Spammer mit Python blocken
Für Dante e.V. betreue ich einige E-Mail-Listen auf mailman-Basis, die seit einigen Tagen von Spammern geflutet werden. Jeden Tag sind dutzende bis hunderte Aufnahme-Requests in der Liste, die ich manuell wegwerfen müsste. Nachdem ich dies einmal händisch getan hatte, musste eine automatische Lösung gefunden werden.
Die Lösung bestand darin, einen Treiber für Firefox („geckodriver“) zu installieren, der das Fernsteuern des Browsers erlaubt. Dann kann mittels selenium Modul die Steuerung aus Python heraus erfolgen. Unten der wesentliche Quellcode als Basis für eigene Arbeiten, den Teil zum Erkennen von legitimen Anfragen habe ich weggelassen.
Nachtrag vom 25.10.2020: Siehe auch die Erweiterung unter https://www.uweziegenhagen.de/?p=4420
# -*- coding: utf-8 -*- """ https://www.edureka.co/community/47679/is-it-possible-to-run-headless-browser-using-python-selenium """ from selenium.webdriver import Firefox from selenium.webdriver.firefox.options import Options opts = Options() #opts.set_headless() # Ich will sehen, wie selenium arbeitet #assert opts.headless # Operating in headless mode browser = Firefox(executable_path=r"C:\Users\Uwe\Downloads\geckodriver-v0.27.0-win64\geckodriver.exe", options=opts) browser.implicitly_wait(3) # einloggen browser.get('<url des mailman admin panels') search_form = browser.find_element_by_name('<passwortfeld_ID>') search_form.send_keys('<adminpasswort>') search_form.submit() #wegwerfen Button pro Zeile fields = browser.find_elements_by_xpath("//input[@value='3']") #email Adresse des Spammers emails = browser.find_elements_by_xpath('//td[contains(text(),"@")]') if len(fields) == len(emails): zipped_list = list(zip(emails, fields)) for i in zipped_list: email, field = i field.click() |