iAdd example selenium script for the atom hackathon. - brcon2023-hackathons - Bitreichcon 2023 Hackathon Repository Err bitreich.org 70 hgit clone git://bitreich.org/brcon2023-hackathons git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/brcon2023-hackathons URL:git://bitreich.org/brcon2023-hackathons git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/brcon2023-hackathons bitreich.org 70 1Log /scm/brcon2023-hackathons/log.gph bitreich.org 70 1Files /scm/brcon2023-hackathons/files.gph bitreich.org 70 1Refs /scm/brcon2023-hackathons/refs.gph bitreich.org 70 1Tags /scm/brcon2023-hackathons/tag bitreich.org 70 i--- Err bitreich.org 70 1commit a7cd0c547c792f74b7784cc0a8c806380a28ca2f /scm/brcon2023-hackathons/commit/a7cd0c547c792f74b7784cc0a8c806380a28ca2f.gph bitreich.org 70 1parent 2922c09dc4919dcea4ac331bbaa4e373ba4ccc4a /scm/brcon2023-hackathons/commit/2922c09dc4919dcea4ac331bbaa4e373ba4ccc4a.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Thu, 10 Aug 2023 16:10:01 +0200 Err bitreich.org 70 i Err bitreich.org 70 iAdd example selenium script for the atom hackathon. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i A sfeed-atom/kvssachsen2atom | 121 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 121 insertions(+), 0 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/sfeed-atom/kvssachsen2atom b/sfeed-atom/kvssachsen2atom /scm/brcon2023-hackathons/file/sfeed-atom/kvssachsen2atom.gph bitreich.org 70 i@@ -0,0 +1,121 @@ Err bitreich.org 70 i+#!/usr/bin/env python Err bitreich.org 70 i+# coding=utf-8 Err bitreich.org 70 i+# Err bitreich.org 70 i+# Copy me if you can. Err bitreich.org 70 i+# by 20h Err bitreich.org 70 i+# Err bitreich.org 70 i+ Err bitreich.org 70 i+import os Err bitreich.org 70 i+import sys Err bitreich.org 70 i+import getopt Err bitreich.org 70 i+ Err bitreich.org 70 i+from selenium import webdriver Err bitreich.org 70 i+from selenium.webdriver.chrome.options import Options as chromeoptions Err bitreich.org 70 i+from selenium.webdriver.support.ui import WebDriverWait Err bitreich.org 70 i+from selenium.webdriver.support import expected_conditions as EC Err bitreich.org 70 i+from selenium.webdriver.common.by import By Err bitreich.org 70 i+ Err bitreich.org 70 i+from datetime import datetime Err bitreich.org 70 i+import pytz Err bitreich.org 70 i+ Err bitreich.org 70 i+def usage(app): Err bitreich.org 70 i+ app = os.path.basename(app) Err bitreich.org 70 i+ sys.stderr.write("usage: %s [-h] URI\n" % (app)) Err bitreich.org 70 i+ sys.exit(1) Err bitreich.org 70 i+ Err bitreich.org 70 i+def main(args): Err bitreich.org 70 i+ try: Err bitreich.org 70 i+ opts, largs = getopt.getopt(args[1:], "h") Err bitreich.org 70 i+ except getopt.GetoptError as err: Err bitreich.org 70 i+ print(str(err)) Err bitreich.org 70 i+ usage(args[0]) Err bitreich.org 70 i+ Err bitreich.org 70 i+ for o, a in opts: Err bitreich.org 70 i+ if o == "-h": Err bitreich.org 70 i+ usage(args[0]) Err bitreich.org 70 i+ else: Err bitreich.org 70 i+ assert False, "unhandled option" Err bitreich.org 70 i+ Err bitreich.org 70 i+ if len(largs) < 1: Err bitreich.org 70 i+ usage(args[0]) Err bitreich.org 70 i+ Err bitreich.org 70 i+ link = largs[0] Err bitreich.org 70 i+ Err bitreich.org 70 i+ options = chromeoptions() Err bitreich.org 70 i+ chromearguments = [ Err bitreich.org 70 i+ "headless", Err bitreich.org 70 i+ "no-sandbox", Err bitreich.org 70 i+ "disable-extensions", Err bitreich.org 70 i+ "disable-dev-shm-usage", Err bitreich.org 70 i+ "start-maximized", Err bitreich.org 70 i+ "window-size=1900,1080", Err bitreich.org 70 i+ "disable-gpu" Err bitreich.org 70 i+ ] Err bitreich.org 70 i+ for carg in chromearguments: Err bitreich.org 70 i+ options.add_argument(carg) Err bitreich.org 70 i+ Err bitreich.org 70 i+ driver = webdriver.Chrome(options=options) Err bitreich.org 70 i+ driver.get(link) Err bitreich.org 70 i+ Err bitreich.org 70 i+ isnews = WebDriverWait(driver=driver, timeout=60).until( Err bitreich.org 70 i+ EC.presence_of_element_located((By.XPATH, Err bitreich.org 70 i+ "//div[@data-last-letter]") Err bitreich.org 70 i+ ) Err bitreich.org 70 i+ ) Err bitreich.org 70 i+ newslist = driver.find_elements(By.XPATH, "//div[@data-filter-target=\"list\"]")[0] Err bitreich.org 70 i+ Err bitreich.org 70 i+ title = driver.find_elements(By.XPATH, "//meta[@property=\"og:title\"]")[0].get_attribute("content") Err bitreich.org 70 i+ description = title Err bitreich.org 70 i+ globaltags = "" Err bitreich.org 70 i+ Err bitreich.org 70 i+ print("""""") Err bitreich.org 70 i+ print("""""") Err bitreich.org 70 i+ print("\t<![CDATA[%s]]>" % (title)) Err bitreich.org 70 i+ print("\t" % (description)) Err bitreich.org 70 i+ print("\t%s" % (link)) Err bitreich.org 70 i+ print("\t" % (link)) Err bitreich.org 70 i+ print("\t" % (link)) Err bitreich.org 70 i+ Err bitreich.org 70 i+ utcnow = datetime.now(pytz.utc) Err bitreich.org 70 i+ print("\t%s" % (utcnow.isoformat())) Err bitreich.org 70 i+ Err bitreich.org 70 i+ articles = newslist.find_elements(By.XPATH, "./div") Err bitreich.org 70 i+ baselink = "/".join(link.split("/", 3)[:-1]) Err bitreich.org 70 i+ for article in articles[::-1]: Err bitreich.org 70 i+ link = article.find_elements(By.XPATH, "./a")[0] Err bitreich.org 70 i+ plink = link.get_attribute("href") Err bitreich.org 70 i+ if not plink.startswith("http"): Err bitreich.org 70 i+ plink = "%s/%s" % (baselink, plink) Err bitreich.org 70 i+ ptitle = link.get_attribute("data-title") Err bitreich.org 70 i+ pcontent = article.text Err bitreich.org 70 i+ pauthor = "sachsen@kvsachsen.de" Err bitreich.org 70 i+ Err bitreich.org 70 i+ # Normalize datetime. Err bitreich.org 70 i+ updateds = article.find_elements(By.XPATH, ".//time")[0].text Err bitreich.org 70 i+ try: Err bitreich.org 70 i+ dtupdated = datetime.strptime(updateds, "%d.%m.%Y") Err bitreich.org 70 i+ except ValueError: Err bitreich.org 70 i+ continue Err bitreich.org 70 i+ Err bitreich.org 70 i+ dtupdated = dtupdated.replace(hour=12, minute=0,\ Err bitreich.org 70 i+ second=0, tzinfo=pytz.utc) Err bitreich.org 70 i+ if dtupdated.year > utcnow.year: Err bitreich.org 70 i+ dtupdated = dtupdated.replace(year=utcnow.year) Err bitreich.org 70 i+ pupdated = dtupdated Err bitreich.org 70 i+ Err bitreich.org 70 i+ print("\t") Err bitreich.org 70 i+ print("\t\t%s" % (plink)) Err bitreich.org 70 i+ print("\t\t<![CDATA[%s]]>" % (ptitle)) Err bitreich.org 70 i+ print("\t\t" % (plink)) Err bitreich.org 70 i+ print("\t\t%s" % (pauthor)) Err bitreich.org 70 i+ print("\t\t%s" % (pupdated.isoformat())) Err bitreich.org 70 i+ print("\t\t" % (pcontent)) Err bitreich.org 70 i+ print("\t") Err bitreich.org 70 i+ Err bitreich.org 70 i+ print("") Err bitreich.org 70 i+ Err bitreich.org 70 i+ return 0 Err bitreich.org 70 i+ Err bitreich.org 70 i+if __name__ == "__main__": Err bitreich.org 70 i+ sys.exit(main(sys.argv)) Err bitreich.org 70 i+ Err bitreich.org 70 .