Add local selenium pdf rendering. - mediawiki-gopher - mediawiki gopher frontend
HTML git clone git://bitreich.org/mediawiki-gopher git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/mediawiki-gopher
DIR Log
DIR Files
DIR Refs
DIR Tags
DIR README
DIR LICENSE
---
DIR commit dd87398cd779b693c9269c2ca5f18e5eb4566f42
DIR parent d8b1342dfd83dc085c9d37079665a3bf5bb18167
HTML Author: Christoph Lohmann <20h@r-36.net>
Date: Fri, 2 Jan 2026 19:06:23 +0100
Add local selenium pdf rendering.
Diffstat:
M pdf/index.cgi | 42 ++++++++++++++++++++++++++++---
1 file changed, 38 insertions(+), 4 deletions(-)
---
DIR diff --git a/pdf/index.cgi b/pdf/index.cgi
@@ -11,6 +11,36 @@ import sys
import getopt
import requests
+from selenium import webdriver
+from selenium.webdriver.chrome.options import Options as chromeoptions
+from selenium.webdriver.chrome.service import Service as chromeservice
+from selenium.webdriver.common.print_page_options import PrintOptions
+import base64
+
+def uri2pdf(uri):
+ options = chromeoptions()
+ chromearguments = [
+ "headless",
+ "no-sandbox",
+ "disable-extensions",
+ "disable-dev-shm-usage",
+ "start-maximized",
+ "window-size=1900,1080",
+ "disable-gpu"
+ ]
+ for carg in chromearguments:
+ options.add_argument(carg)
+
+ service = chromeservice(executable_path="/usr/bin/chromedriver")
+ driver = webdriver.Chrome(service=service, options=options)
+ driver.implicitly_wait(2)
+ driver.get(uri)
+
+ print_options = PrintOptions()
+ pdf = driver.print_page(print_options)
+ driver.quit()
+ return base64.b64decode(pdf)
+
def main(args):
if len(args) != 7:
sys.stderr.write("Must be run as geomyidae dcgi.\n")
@@ -35,6 +65,7 @@ def main(args):
mw_base = os.getenv("MEDIAWIKI_BASE", "https://en.wikipedia.org")
mw_pdf = os.getenv("MEDIAWIKI_PDF", "https://en.wikipedia.org/api/rest_v1/page/pdf")
+ mw_page_base = "%s/wiki" % (mw_base)
# Mandatory for wikipedia.
headers = { "User-Agent": "gopher mediawiki frontend/0.1" }
@@ -50,9 +81,13 @@ def main(args):
page = cmds[1]
if page.endswith(".pdf"):
page = page[:-4]
- pdf = requests.get("%s/%s" % (mw_pdf, \
- page), headers=headers)
- mw_replace = "%s/wiki" % (mw_base)
+ try:
+ pdf = requests.get("%s/%s" % (mw_pdf, \
+ page), headers=headers)
+ except:
+ pdf = uri2pdf("%s/%s" % (mw_page_base, page))
+
+ mw_replace = mw_page_base
g_content = pdf.content.replace(mw_replace.encode("utf-8"),\
g_uri.encode("utf-8"))
sys.stdout.buffer.write(g_content)
@@ -60,7 +95,6 @@ def main(args):
sys.stdout.write(gph)
sys.stdout.flush()
-
return 0
if __name__ == "__main__":