References

Automation Engines

Three Stacks, Seven Variants

PuppeteerPort is the default engine and works out of the box. It talks to Chrome directly over the Chrome DevTools Protocol using SDi's own CDP implementation -- no separate driver binary required. Selenium is the long-established WebDriver standard. It supports Chrome, Edge, and Firefox but requires a WebDriver binary that matches your installed browser version. OttoMagic is GPAL's exclusive extension-based stack. It communicates with the browser through GPALRestAPI -- a local REST server -- and a browser extension that must be installed in the profile you are automating. Each stack has a Hardware (HW) variant that adds real OS-level mouse and keyboard events. Selenium additionally has a JavaScript (JS) variant that interacts with elements by injecting JavaScript instead of using WebDriver's own DOM interaction.

Mixing Interaction Types

Hardware and JavaScript interaction types can be overridden at three levels: globally on GPAL, at the UOW level inline after WithSelector(), or per selector definition. This lets you mix interaction methods within a single workflow. Hardware for one element, Selenium for another, JavaScript for a third. JavaScript injection is Selenium-only. Hardware emulation works across all three stacks.

// Global engine setting

GPAL.WithAutomationEngine(

AutomationEngine.Selenium);


// Inline UOW-level override

browser

.LeftClick("#normal-btn")


.WithSelector("#stubborn-btn")

.WithHardware

.LeftClick()


.WithSelector("#js-field")

.WithJavaScript

.FillInFrom("value");

NOTE

The WithJavaScript interaction type only applies when using a Selenium-based engine. It is not available for OttoMagic or Puppeteer engines.

Choosing Your Engine

All three stacks cover Chrome. Selenium also supports Edge and Firefox. In terms of what they can automate, they are roughly equivalent -- the same workflow runs on any of them with no code changes. Puppeteer is built in and needs no setup, making it the natural starting point. Selenium has been the industry standard for years and has broad tooling support, but its WebDriver fingerprint is well-known and easily detected by bot-protection systems. OttoMagic runs as a REST server paired with a browser extension, which makes the browser profile look like a normal user session. Its events are still synthetic, so fingerprinting at the event level remains possible. Puppeteer communicating over CDP with no injected extension is likely the stealthiest of the three. In practice all three perform extremely well across a wide range of real-world sites.

NOTE

PuppeteerPipe and PuppeteerPipeHW are defined in the engine enum but are currently under development. Use PuppeteerPort for all CDP-based automation.

💬 Ask GPAL