# 📸 Screenshotting cljdoc Trying out [Sparkledriver](https://github.com/jackrusher/sparkledriver) to take screenshots with the built-in webkit browser that's bundled with the JDK. # Sparkledriver We start by requring sparkledriver. ```clojure id=3259e112-a0f3-4160-b662-1ba900f9978c (require '[sparkledriver.browser :refer [with-browser make-browser fetch!]]) (require '[sparkledriver.element :refer [screenshot]]) (require '[clojure.java.io :as io]) ``` Let's create a browser and a helper function. ```clojure id=50304239-2d5a-4dcb-b0ac-1400483931ea (def browser (make-browser)) (defn preview [url] (-> (fetch! browser url) screenshot io/file (io/copy (io/file "/results/screenshot.png")))) ``` And, let's shoot! 📸 ```clojure id=4b2a9e5c-10b3-4dcc-ab8e-2fe6d6bc7448 (preview "https://cljdoc.xyz/d/ring/ring-core/1.7.0-RC2/doc/readme") ``` ![screenshot.png][nextjournal#output#4b2a9e5c-10b3-4dcc-ab8e-2fe6d6bc7448#screenshot.png] ```clojure id=c837e498-fba2-4f78-a2e6-ae67b139ca20 (use '[clojure.java.shell :only [sh]]) (defn screenshot [url] (sh "google-chrome" "--headless" "--disable-gpu" "--no-sandbox" "--window-size=960,720" "--hide-scrollbars" "--screenshot=/results/screenshot.png" "--enable-font-antialiasing" url)) ``` ```clojure id=d5dc3904-238c-4c09-9d03-dd21a051fa5a (screenshot "https://cljdoc.xyz/d/ring/ring-core/1.7.0-RC2/doc/readme") ``` ![screenshot.png][nextjournal#output#d5dc3904-238c-4c09-9d03-dd21a051fa5a#screenshot.png] [nextjournal#output#4b2a9e5c-10b3-4dcc-ab8e-2fe6d6bc7448#screenshot.png]: [nextjournal#output#d5dc3904-238c-4c09-9d03-dd21a051fa5a#screenshot.png]:
This notebook was exported from https://nextjournal.com/a/KFfDdBSjXVwLjU4Cm4Uek?change-id=CJi9FuFyifs1QkR2uNWXz9 ```edn nextjournal-metadata {:article {:settings nil, :nodes {"16e84450-4b80-40af-a81c-ac4fe67d64e9" {:environment [:environment {:article/nextjournal.id #uuid "5b3383e1-b30e-4fcc-91ac-da736033cb7d", :change/nextjournal.id #uuid "5b338c25-a90b-430b-9b62-fdd8ad0b4755", :node/id "461716f8-7574-4133-9cfb-36adaded835a"}], :id "16e84450-4b80-40af-a81c-ac4fe67d64e9", :kind "runtime", :language "clojure", :type :nextjournal}, "3259e112-a0f3-4160-b662-1ba900f9978c" {:compute-ref #uuid "c856ac10-afa8-11e8-b544-fdbbebd1952f", :exec-duration 479, :id "3259e112-a0f3-4160-b662-1ba900f9978c", :kind "code", :output-log-lines {}, :runtime [:runtime "d0ca602a-65c9-4b50-ad13-e4704e6b115e"]}, "4b2a9e5c-10b3-4dcc-ab8e-2fe6d6bc7448" {:compute-ref #uuid "fd4d0590-afa8-11e8-b544-fdbbebd1952f", :exec-duration 28612, :id "4b2a9e5c-10b3-4dcc-ab8e-2fe6d6bc7448", :kind "code", :output-log-lines {}, :runtime [:runtime "d0ca602a-65c9-4b50-ad13-e4704e6b115e"]}, "50304239-2d5a-4dcb-b0ac-1400483931ea" {:compute-ref #uuid "fb00a490-afa8-11e8-b544-fdbbebd1952f", :exec-duration 892, :id "50304239-2d5a-4dcb-b0ac-1400483931ea", :kind "code", :output-log-lines {}, :runtime [:runtime "d0ca602a-65c9-4b50-ad13-e4704e6b115e"]}, "c837e498-fba2-4f78-a2e6-ae67b139ca20" {:compute-ref #uuid "739dd780-afac-11e8-b544-fdbbebd1952f", :exec-duration 68, :id "c837e498-fba2-4f78-a2e6-ae67b139ca20", :kind "code", :output-log-lines {}, :runtime [:runtime "16e84450-4b80-40af-a81c-ac4fe67d64e9"]}, "d0ca602a-65c9-4b50-ad13-e4704e6b115e" {:environment [:environment {:article/nextjournal.id #uuid "5b323f18-3af3-4471-85e6-ad01f51e34ed", :change/nextjournal.id #uuid "5b3377df-9e35-4226-996f-a9ae67e60edb", :node/id "48cc19ca-4f47-4765-bb66-77144315ec0f"}], :id "d0ca602a-65c9-4b50-ad13-e4704e6b115e", :kind "runtime", :language "clojure", :name "Sparkledriver", :resources {:machine-type "n1-standard-2"}, :type :nextjournal}, "d5dc3904-238c-4c09-9d03-dd21a051fa5a" {:compute-ref #uuid "74f4b4f0-afac-11e8-b544-fdbbebd1952f", :exec-duration 1208, :id "d5dc3904-238c-4c09-9d03-dd21a051fa5a", :kind "code", :output-log-lines {}, :runtime [:runtime "16e84450-4b80-40af-a81c-ac4fe67d64e9"]}}, :nextjournal/id #uuid "028c6bf7-6237-4541-bfb4-def8ceb1a4b1", :article/change {:nextjournal/id #uuid "5b8d8633-f7b9-44aa-a6df-e4043728f7c2"}}} ```