https://github.com/pog7x/ssfactory
Simple screenshot factory
https://github.com/pog7x/ssfactory
chromedriver concurency geckodriver go screenshot selenium webdriver
Last synced: 2 months ago
JSON representation
Simple screenshot factory
- Host: GitHub
- URL: https://github.com/pog7x/ssfactory
- Owner: pog7x
- License: mit
- Created: 2022-11-15T16:10:18.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-02-24T15:27:23.000Z (over 3 years ago)
- Last Synced: 2025-08-03T23:02:08.297Z (11 months ago)
- Topics: chromedriver, concurency, geckodriver, go, screenshot, selenium, webdriver
- Language: Go
- Homepage:
- Size: 14.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ssfactory
[](https://pkg.go.dev/github.com/pog7x/ssfactory)
[](https://github.com/pog7x/ssfactory/actions/workflows/go.yml)
[](https://github.com/pog7x/ssfactory/blob/master/LICENSE)
Concurrent screenshot capture library for Go, powered by Selenium WebDriver and a built-in worker pool.
## Features
- **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)
## Prerequisites
| Dependency | Purpose |
|---|---|
| [ChromeDriver](https://chromedriver.chromium.org/) or [GeckoDriver](https://github.com/mozilla/geckodriver) | Browser automation driver |
| Chrome or Firefox | Target browser binary |
## Installation
```bash
go get github.com/pog7x/ssfactory
```
## Quick Start
```go
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
},
})
}
```
### Firefox example
```go
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,
})
```
## API
### Element selectors
| 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` |
### `MakeScreenshotPayload`
| 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 |
## License
[MIT](LICENSE) — Copyright (c) 2022 pog7x