
Concurrent screenshot capture library for Go, powered by Selenium WebDriver and a built-in worker pool.
- Browser support — Chrome (via ChromeDriver) and Firefox (via GeckoDriver)
- Concurrency — built-in worker pool for parallel screenshot jobs
- Element targeting — capture specific DOM elements by ID, XPath, CSS selector, tag name, etc.
- Flexible output — raw
[]byte passed to your handler (save to disk, upload, encode — up to you)
go get github.com/pog7x/ssfactory
package main
import "github.com/pog7x/ssfactory"
func main() {
f, stop, err := ssfactory.NewFactory(ssfactory.InitFactory{
WebdriverPort: 9515,
UseBrowser: ssfactory.ChromeName,
ChromeBinaryPath: "/usr/bin/google-chrome",
ChromedriverPath: "/usr/local/bin/chromedriver",
ChromeArgs: []string{"--headless", "--no-sandbox", "--disable-dev-shm-usage"},
WorkersCount: 4,
})
if err != nil {
panic(err)
}
defer stop()
maximize := ""
f.MakeScreenshot(ssfactory.MakeScreenshotPayload{
URL: "https://example.com",
DOMElementBy: ssfactory.ByTagName,
DOMElementName: "body",
Scroll: true,
MaximizeWindow: &maximize,
BytesHandler: func(b []byte) error {
// save, upload, encode to PNG, etc.
return nil
},
})
}
f, stop, err := ssfactory.NewFactory(ssfactory.InitFactory{
WebdriverPort: 8080,
UseBrowser: ssfactory.FirefoxName,
FirefoxBinaryPath: "/usr/bin/firefox",
GeckodriverPath: "/usr/local/bin/geckodriver",
FirefoxArgs: []string{"--headless", "--width=1920"},
WorkersCount: 2,
})
| Constant |
Selenium strategy |
ByID |
id |
ByXPATH |
xpath |
ByLinkText |
link text |
ByPartialLinkText |
partial link text |
ByName |
name |
ByTagName |
tag name |
ByClassName |
class name |
ByCSSSelector |
css selector |
| Field |
Type |
Description |
URL |
string |
Page URL to navigate to |
DOMElementBy |
string |
Selector strategy (see table above) |
DOMElementName |
string |
Selector value |
Scroll |
bool |
Scroll element into view before capture |
MaximizeWindow |
*string |
Maximize window handle (pass nil to skip) |
Timeout |
time.Duration |
Wait timeout before capturing |
BytesHandler |
func([]byte) error |
Callback receiving screenshot bytes |
MIT — Copyright (c) 2022 pog7x