Skip to content
This repository has been archived by the owner on Feb 14, 2023. It is now read-only.

Take screenshot #2

Closed
Anarchist666 opened this issue Nov 17, 2017 · 2 comments
Closed

Take screenshot #2

Anarchist666 opened this issue Nov 17, 2017 · 2 comments

Comments

@Anarchist666
Copy link

Anarchist666 commented Nov 17, 2017

The CaptureScreenshotResult has one named field _screenshotData :: String. The Page.captureScreenshot should be used with onEvent or waitFor?

@Anarchist666
Copy link
Author

Anarchist666 commented Nov 17, 2017

Already found out.

@Anarchist666
Copy link
Author

It turned out like this:

import Control.Monad.Trans (liftIO)
import Data.Foldable (traverse_)
import Chrome.Target.Client
import Chrome.Target.Async (waitFor, onEvent, stopEventListener)
import qualified Chrome.API.Page as Page
import qualified Chrome.API.Page.Types as PageTypes
import qualified Chrome.API.Network as Network
import Data.ByteString.Base64 (decode)
import Data.ByteString as B
import Data.ByteString.Char8 as C8

takeScreenshot :: String -> String -> TargetClient ()
takeScreenshot url outputFileName = do
    traverse_ waitFor [Page.enable, Network.enable Network.defaultEnableParams]

    let screenshotParams = PageTypes.CaptureScreenshotParams "png" 0 True

    waitFor $ Page.navigate url
    waitFor $ Page.onLoadEventFired
    result <- waitFor $ Page.captureScreenshot screenshotParams
    liftIO $ writeData result

    traverse_ waitFor [Page.disable, Network.disable]

    where
        writeData (Left error)  = print error
        writeData (Right event) = writeDecodedData . decode . C8.pack $ PageTypes._screenshotData event
        writeDecodedData (Left error) = print error
        writeDecodedData (Right event) = B.writeFile outputFileName event

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant