iAdd selenium to tsv example from bob. - 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 d2f3f8bf36e6d7b0d88f7d3e02353bcd87a93795 /scm/brcon2023-hackathons/commit/d2f3f8bf36e6d7b0d88f7d3e02353bcd87a93795.gph bitreich.org 70 1parent a7cd0c547c792f74b7784cc0a8c806380a28ca2f /scm/brcon2023-hackathons/commit/a7cd0c547c792f74b7784cc0a8c806380a28ca2f.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:14:57 +0200 Err bitreich.org 70 i Err bitreich.org 70 iAdd selenium to tsv example from bob. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i A sfeed-atom/selenium_crawl_tsv.py | 118 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 118 insertions(+), 0 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/sfeed-atom/selenium_crawl_tsv.py b/sfeed-atom/selenium_crawl_tsv.py /scm/brcon2023-hackathons/file/sfeed-atom/selenium_crawl_tsv.py.gph bitreich.org 70 i@@ -0,0 +1,118 @@ Err bitreich.org 70 i+from selenium import webdriver Err bitreich.org 70 i+from selenium.webdriver.common.by import By Err bitreich.org 70 i+ Err bitreich.org 70 i+from selenium.webdriver.firefox.options import Options Err bitreich.org 70 i+from selenium.webdriver.firefox.firefox_profile import FirefoxProfile Err bitreich.org 70 i+ Err bitreich.org 70 i+import sys Err bitreich.org 70 i+from datetime import datetime Err bitreich.org 70 i+ Err bitreich.org 70 i+def make_escape_content_trans(): Err bitreich.org 70 i+ m = {} Err bitreich.org 70 i+ for i in range(0, 32): Err bitreich.org 70 i+ m[i] = "" Err bitreich.org 70 i+ m[0x7f] = "" # DEL Err bitreich.org 70 i+ # replace Err bitreich.org 70 i+ m["\\"] = "\\\\" Err bitreich.org 70 i+ m["\n"] = "\\n" Err bitreich.org 70 i+ m["\t"] = "\\t" Err bitreich.org 70 i+ Err bitreich.org 70 i+ return str.maketrans(m) Err bitreich.org 70 i+ Err bitreich.org 70 i+def make_escape_field_trans(): Err bitreich.org 70 i+ m = {} Err bitreich.org 70 i+ for i in range(0, 32): Err bitreich.org 70 i+ m[i] = "" Err bitreich.org 70 i+ m[0x7f] = "" # DEL Err bitreich.org 70 i+ # replace Err bitreich.org 70 i+ m["\n"] = " " Err bitreich.org 70 i+ m["\t"] = " " Err bitreich.org 70 i+ Err bitreich.org 70 i+ return str.maketrans(m) Err bitreich.org 70 i+ Err bitreich.org 70 i+escape_content_tbl = make_escape_content_trans() Err bitreich.org 70 i+escape_field_tbl = make_escape_field_trans() Err bitreich.org 70 i+ Err bitreich.org 70 i+def escape_content(s): Err bitreich.org 70 i+ return s.translate(escape_content_tbl).strip() Err bitreich.org 70 i+ Err bitreich.org 70 i+def escape_field(s): Err bitreich.org 70 i+ return s.translate(escape_field_tbl).strip() Err bitreich.org 70 i+ Err bitreich.org 70 i+if len(sys.argv) > 1: Err bitreich.org 70 i+ url = sys.argv[1] Err bitreich.org 70 i+else: Err bitreich.org 70 i+ print("usage: ") Err bitreich.org 70 i+ sys.exit(1) Err bitreich.org 70 i+ Err bitreich.org 70 i+options = Options() Err bitreich.org 70 i+options.add_argument("--headless") Err bitreich.org 70 i+ Err bitreich.org 70 i+# use existing profile: Err bitreich.org 70 i+ Err bitreich.org 70 i+#options.add_argument("--profile") Err bitreich.org 70 i+#profile_path = "/home/hiltjo/.mozilla/firefox/z86g7oxr.default-release" Err bitreich.org 70 i+# NOTE: must not be running at the same time. Err bitreich.org 70 i+#options.add_argument(profile_path) Err bitreich.org 70 i+#options.set_preference("profile", profile_path) Err bitreich.org 70 i+ Err bitreich.org 70 i+# setup custom profile: Err bitreich.org 70 i+# JS disabled Err bitreich.org 70 i+options.set_preference("javascript.enabled", False) Err bitreich.org 70 i+# disable stylesheet Err bitreich.org 70 i+options.set_preference("permissions.default.stylesheet", 2) Err bitreich.org 70 i+# disable image loading Err bitreich.org 70 i+options.set_preference("permissions.default.image", 2) Err bitreich.org 70 i+# override user-agent. Err bitreich.org 70 i+#options.set_preference("general.useragent.override", "whatever you want") Err bitreich.org 70 i+ Err bitreich.org 70 i+driver = webdriver.Firefox(options=options) Err bitreich.org 70 i+ Err bitreich.org 70 i+# set timeouts Err bitreich.org 70 i+#driver.implicitly_wait(10) Err bitreich.org 70 i+ Err bitreich.org 70 i+# get the page Err bitreich.org 70 i+driver.get(url) Err bitreich.org 70 i+ Err bitreich.org 70 i+# print page title Err bitreich.org 70 i+#print(driver.title) Err bitreich.org 70 i+ Err bitreich.org 70 i+#pagesource = driver.execute_script("return document.body.InnerHTML;") Err bitreich.org 70 i+#print(pagesource) Err bitreich.org 70 i+#print(driver.page_source) Err bitreich.org 70 i+#outer_html = driver.find_element(By.XPATH, "//body").get_attribute("outerHTML") Err bitreich.org 70 i+ Err bitreich.org 70 i+#outer_html = driver.find_element(By.TAG_NAME, "html").get_attribute("outerHTML") Err bitreich.org 70 i+#print(outer_html) Err bitreich.org 70 i+ Err bitreich.org 70 i+# show all links on a page Err bitreich.org 70 i+#links = driver.find_elements(By.TAG_NAME, "a") Err bitreich.org 70 i+anchors = driver.find_elements(By.CSS_SELECTOR, "main a") Err bitreich.org 70 i+links = [] Err bitreich.org 70 i+for anchor in anchors: Err bitreich.org 70 i+ href = anchor.get_attribute("href") Err bitreich.org 70 i+ text = anchor.text Err bitreich.org 70 i+ if len(href): Err bitreich.org 70 i+ links.append({"href": href, "text": text}) Err bitreich.org 70 i+ Err bitreich.org 70 i+for link in links: Err bitreich.org 70 i+ driver.get(link["href"]) Err bitreich.org 70 i+ Err bitreich.org 70 i+ # parse timestamp. Err bitreich.org 70 i+ time = driver.find_element(By.TAG_NAME, "time") Err bitreich.org 70 i+ ts = datetime.strptime(time.text, "%Y-%m-%d") Err bitreich.org 70 i+ ts = int(ts.timestamp()) Err bitreich.org 70 i+ Err bitreich.org 70 i+ content = driver.find_element(By.CSS_SELECTOR, "article").get_attribute("outerHTML") Err bitreich.org 70 i+ title = driver.title Err bitreich.org 70 i+ title = title.replace(" - Codemadness", "") Err bitreich.org 70 i+ Err bitreich.org 70 i+ # escape fields Err bitreich.org 70 i+ content = escape_content(content) Err bitreich.org 70 i+ title = escape_field(title) Err bitreich.org 70 i+ link = escape_field(link["href"]) Err bitreich.org 70 i+ Err bitreich.org 70 i+ print("%d\t%s\t%s\t%s\thtml" % (ts, title, link, content)) Err bitreich.org 70 i+ Err bitreich.org 70 i+driver.close() Err bitreich.org 70 i+driver.quit() Err bitreich.org 70 .